飴屋

Androidアプリ/日記9

気がつけば新年

あけましておめでとうございます。昨年(2010年)はスマフォ元年とか電子書籍元年とか騒がれて、電子ガジェットの普及が目覚ましい一年でした。AUが重い腰を上げてAndroid端末に本気で乗り出したり、Softbankに掌握されていたiPhoneが、日本通信のSIMとSIMフリー機の組み合わせで使われだしたり、下半期は怒涛の勢いを感じました。

テレビではモバイル端末向けのゲームの宣伝が飛び交い、景気のよい様子がみてとれるようになりました。ソーシャルゲームというジャンルにはまだまだノビシロを感じます。

さてAndroidの方はどうかというと、OSバージョン2.3(Gingerbread)の登場が間近にせまり、タブレット向けと目されるOSバージョン3.0(Honeycomb)の噂も聞こえてくるようになりました。プロセッサもNVIDIA Tegraが台頭して、2コアやらGPUやらを使いこなせばアプリの可能性もなおさら高まりそうです。

しかし、昨年末、私は別の携帯電話案件に忙殺され、Android関連の開発に進捗を見いだせないまま、新年を迎えてしまうのでした。今年もよろしくお願いいたします。
たまにAndroidマーケットを眺めてみたりもしたのですが、あのアプリの渦から面白そうなアプリを探し出すのは困難を極め、なんだかちょっと取り残された感を味わっていました。ただ、Androidの面白アプリを把握できている人もそれほどいなそうなので、きっとおいつけます。2011年はAndroidとiPhoneが並んでくれると嬉しいですね。Amazonのappstoreが始まったら、また少し違う流れが起きるかもと期待しています。

データを保存してみよう2

さて、前回データを保存するお手伝いをしてくれるSQLiteOpenHelperの派生クラスを作ったところで終わっていたので、今回はこれを利用して実際にデータを保存してみます。大分、間が空いてしまったので、思い出しながらの作業となります。

  • DBクラス
    • DB名等の定数
    • レコードを表す内部クラス(Weight)
    • データベース構築用クラス(DBOpener)
    • データベース操作メソッド

こんな内容の「DB.java」ファイルを作ってありました。

その前に数値入力用のActivity(InputWeight)というのも用意していましたが、こちらは画面のレイアウトがされているだけで、実装は空っぽでした。そこで今回は「入力された値をデータベースに保存する」という実装をInputWeight.java上で行っていきたいと思います。

Activity生成処理

public class InputWeight extends Activity {
private DB db;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.input);
db = new DB(this);
Button btnLog = (Button)findViewById(R.id.ButtonLog);
btnLog.setOnClickListener(new Button.OnClickListener() {

// CLICK時の処理

});
}
}

Activityの生成から消滅までの流れは既に解説したと思います。今回はActivity生成時のonCreateメソッドを上書きしてその中でDBクラスのインスタンスを作っています。
そして、レイアウトされた「記録する」ボタンがクリックされたときの処理を定義しようとしています。findViewByIdにボタンのリソースIDを渡すと該当するButtonのインスタンスが返ってくるので、そのインスタンスにsetOnClickListenerというイベントリスナーをくっつけました。最近JavaScriptやActionScriptばかりいじっていたので、Android用のイベントリスナーの書き方にまだなじめません。

クリックされたら記録する

new Button.OnClickListener() {
public void onClick(View v) {
EditText weightinput = (EditText)findViewById(R.id.EditTextWeight);
EditText fatinput = (EditText)findViewById(R.id.EditTextFatPercentage);
TimePicker time = (TimePicker)findViewById(R.id.TimePickerWeight);
DatePicker date = (DatePicker)findViewById(R.id.DatePickerWeight);
Weight w = new Weight();
w.setWeight(Integer.parseInt(weightinput.getText().toString()));
w.setFat(Integer.parseInt(fatinput.getText().toString()));
w.setDate(String.format("%04d-%02d-%02d %02d:%02d:00", date.getYear(),date.getMonth()+1,date.getDayOfMonth(),

time.getCurrentHour(),time.getCurrentMinute()));

db.insert(w);
}
}

クリックされたときの動作を制御するButton.OnClickListenerの内容は上記の通りです。
onClickメソッドを定義するだけです。そこで体重、体脂肪、日付、時間の入力欄のインスタンスをまたfindViewByIdを使って取得します。

続いて、DB.javaで定義しておいたWeightクラスを引数なしの方のコンストラクタで呼び出してデータの入れ物を作り、setWeight、setFat、setDateのメソッドで入力値をセットします。日付の文字列フォーマットなんかはもう少しスマートに生成する方法がありそうですが、わかりません。

あとはDB.insertの引数にデータを渡せば、SQLiteに無事データが記録されているはず・・・ですが、まだ確認できない状態です。次回、入力値をグラフにして出力する方法を実装しましょう。

あと、クリックされた後、画面が入力欄のままになっているので、どこかに遷移するなり、新たに入力を受け付けるなり、画面の遷移についても考えないといけませんでした。

日記一覧