AndroidStudioでデータベースを使ってみたい&BMI計算

スポンサーリンク
スポンサーリンク
スポンサーリンク

SQLite

Pluginを探していたら、SQL AndroidというPluginを見つけた。なんかすごい便利そう!と思ったので使ってみたくなった。ので、RDBを使ったアプリを作ってみたい。RDBに関しては、ほとんど知識がない。仕事でちょろっとAccessを使ったことがあるけど、すっごい簡単なSQL文書くぐらいで、リレーション張ったこともないぐらい。できるかな。できるだろ。ついでにちょこちょこ作ってくやつも作ろう。生活電卓って名前にしよう。

とりあえずBMI計算機を作ろう

そんでその記録を保存するためにSQLite使えばいいんだ。そうしよう。

画面作る

色んな計算のリスト→個別の計算→その計算の履歴みたいな遷移にしたい。リストを作るにはListViewを使うみたい。見てみたらLegacyに入ってる。今はRecyclerViewに置き換わってるみたい。えー、どっち使えばいいん。色々見るとRecyclerViewはクリックイベントを自分で実装するらしい。それは自分には無理そうなので、ListViewにすることにした。

string.xml
<resources>
    <string name="app_name">My Application</string>
    <string-array name="calc_menu">
        <item>BMI計算</item>
        <item>日数計算</item>
        <item>現年齢</item>
        <item>時給給与計算</item>
        <item>子供の肥満</item>
        <item>消費税</item>
        <item>時間計算</item>
        <item>適正・美容・モデル体重</item>
        <item>底辺と高さから角度と斜辺を計算</item>
        <item>子供の身長予測</item>
    </string-array>
</resources>
activity_main.xml
<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:entries="@array/calc_menu"/>

で、一番最初の画面ができた。とりあえずBMIということでそっちのActivityの画面を作る。

ま、てきとーに。

リストをクリックしたらBMIに飛ぶようにする

ListItemClickListener
private class ListItemClickListener implements AdapterView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        Intent intent;

        switch (position) {
            case (0):
                intent = new Intent(LifeCalcActivity.this, BMIActivity.class);
                startActivity(intent);
                break;

            case (1):

                break;
        }
    }
}

うーんと、AdapterViewがListView、ViewがListViewのView(この場合TextViewが取れてる。string_arrayからだからかな?)、positionが行番号、idが…なんのidだろこれ。ま、いいや。とりあえずpositionでswitchしてみた。

onCreate内
ListView listView = findViewById(R.id.calc_menu);
listView.setOnItemClickListener(new ListItemClickListener());

んで、リスナの設定。

BMI計算

画面の処理色々
android:focusable="true"
android:focusableInTouchMode="true"

最初画面作った際、身長欄にフォーカスが当たってたので、TextViewにフォーカスを設定してEditTextのフォーカスを外す。

android:hint="@string/body_height"

入力説明用にTextを入力しといたら、フォーカスしても残ってるのでなんじゃこりゃ、と思ったらandroid:hintに設定するんだったみたい。

android:inputType="numberDecimal"

キーボードが文字入力で出てくるので、数字入力にする。これで入力制限もできるみたい。

入力終了時にフォーカスが当たりっぱなのが気に食わないけど、改善方法が分からんのでほっとく。

計算する

電卓作ったときに見なかったことにしたBigDesimalを使ってみる。

EditText etHeight;
EditText etWeight;
TextView tvResult;
public void onClickCalc(View v) {
    String result;

    etHeight = findViewById(R.id.editTextHeight);
    etWeight = findViewById(R.id.editTextWeight);
    tvResult = findViewById(R.id.result_textView);

    BigDecimal valueHeight = new BigDecimal(etHeight.getText().toString());
    BigDecimal valueWeight = new BigDecimal(etWeight.getText().toString());

    valueHeight = valueHeight.scaleByPowerOfTen(-2).pow(2);
    result = valueWeight.divide(valueHeight, 2, RoundingMode.HALF_UP).toPlainString();

    tvResult.setText("あなたのBMIは…" + "\n" + result);

}

こんな。若干めんどくせぇな。

なかなかに普通だ。そしたら今度は計算結果をDBに保存してくようにすればいいね。ようやくだな、記事分けよっと。

参考

人気ライブラリ
Androidアプリの起動時にEditTextからフォーカスを外す方法について - moshimore Knowledge
Androidアプリを起動した際にEditTextにフォーカスが当たってしまい、その影響でキーボードが表示されてしまうのを防ぐ方法です。 画面上の適当な部品にフォーカスを当てることにより防ぐことができます。
[Android] スマホにEditTextを使って文字を入力する
Androidアプリで文字入力を扱うにはEditTextを使います。以下は EditText に文字を入れ、ボタンをタップすることにより TextView に表示される簡単な例です。
[Android] EditText 文字入力と表示制限
EditText は簡単に使えますが、なにも手当しないと、ユーザーがいくらでも文字を入力して、レイアウトが崩れてしまいます。だらだらと入力が表示されてしまいますEditText では文字数など幾つかの制限を設定することができます。
メモ:inputType による入力の制限 - チラシのすきま
TextView  |  Android デベロッパー  |  Android Developers
【Java】BigDecimalをちゃんと使う~2018~ - Qiita
Java9でBigDecimal#ROUND_~系がやっと@Deprecatedになりましたね。 にもかかわらず、未だにBigDecimalを解説するブログやエントリで、BigDecimal#setScale・BigDecimal#d...
文字列の改行 - Androider
1から始めるAndroidアプリケーションの開発

コメント

タイトルとURLをコピーしました