blog

Androidでデータベースアプリを作成してみましょう。(前編)

2011.07.25

デバイスソリューション部 長野です。

今回はAndroidに搭載されているデータベース(SQLite)を使ったアプリを作成します。
これから何かアプリケーションを作成したいと考えている方の参考になれば幸いです。
サンプルとして日記アプリを作成します。開発環境の準備などについてはこちらを参照して下さい。プロジェクトの準備も出来上がっている状態から話を進めます。

それでは始めていきましょう。

 

1.作成するアプリ考えましょう

まずはこれを考えないと、プロジェクトの生成も出来ませんよね。
自分のやりたい事を思案し、作成したいアプリか決まったらその構成を考えてみましょう。

今回はDBを使用したアプリケーションの例題として、日記アプリを作成したいと思います。
日記アプリの構成でやりたい事は大きく2つです。データの登録とその参照です。
大まかな日記アプリの仕様を考えますと、
  ①過去の日記は編集は行えない。
  ②1日に1回だけ登録が行える。
とします。
本文について一言だけ残すのも良いですが、やはりある程度の文章は必要です。手入力するのも大変なので
  ③音声入力できる。
を追加してみましょう。
過去データが検索できれば便利なので
  ④検索もできる。
もやりましょう。検索は本文をLIKE条件で検索して一覧表示するものとします。
一覧表示については月毎でリスト表示し、
  ⑤タップで参照画面に遷移する。
動作にします。

自分がアプリを操作している所を想像していると、こうした方が便利かなーと画面の構成が浮かんできます。また実際にレイアウトやプログラムの作成をやっていくと色々と頭に浮かんでくるものです。まー兎にも角にも、まずは作業を進めていかないと話になりませんので、ある程度の仕様を考えたら次に進んでいきましょう。

 
2.レイアウトを作成

まずは画面を作成しましょう。
プロジェクトの「res」フォルダ配下の「layout」にあるxmlを作成します。
”レイアウト”タブから構成を作るのも良し、xmlを直書きするのも良し、自分の好きなやり方で画面を作成して下さい。

(私的な意見ですが、)Androidアプリを作成するのにどの工程に時間がかかるかというと、本工程かと思います。
TextViewを設定するだけでも、Fontの大きさや種類や色、TextViewの大きさやマージンなどなど1つのパーツでも様々なプロパティがあります。見るよりも自分で実際に試してみる事をオススメします。
デザイン性の優れたアプリ、ユーザー操作の優れたアプリは同じ種類のアプリでもそれなりのDL数を上げています。
そういった意味でもレイアウトなどは大事だと私は考えます。
っといいつつ、デザイン性の無い私が作成した日記アプリで扱う3つの完成したレイアウトは以下になります。(けど、それなりに時間はかかってますよ…ほんとに)


●res/layout/top.xml


●res/layout/add.xml


●res/layout/view.xml


レイアウトの各アイテム作成についてのプロパティなどの詳細は割愛させて頂きますが、表示文字の指定の仕方を少しだけ説明します。

TextViewやButtonに表示する文字列を設定しますが、この時

  android:text=”Write a diary today”

と、直接文字列を指定するのも間違いではありませんが、それよりも

  android:text=”@string/stringname”

というように別に用意したリソースを指定する方が便利になります。
別に用意するリソースというのは「res」フォルダ内の「values」フォルダにある[strings.xml]を指します。英語なら「values-en」日本語なら「values-ja」という名前のフォルダを作成します。それぞれのフォルダの[strings.xml]にはそれぞれの言語で@string nameに対した文字を記載します。

  「values-en」は英語なので、<string name=”btn_top_add”>Write a diary today</string>
  「values-ja」は日本語なので、<string name=”btn_top_add”>今日の日記を書く</string>

こうしておくことで、端末の言語設定に合わせて文字が表示されるようになります。用意した言語がない場合、「values」フォルダにある言語が表示される事になります。「values-xx」-xxについて興味のある方は調べてみてください。

 
3.日記データを記録するデータベースを作成

データベースとなると、何か取っつき難い人もいるかと思いますが、やってみると思うより簡単に扱えちゃったりします。
記録するレコードを扱うクラスと、記録したデータを操作するクラスを作成する事になります。
それでは見ていきましょう。
 

3-1.レコード記録クラス (Class:RecordItem)

データベースに記録する情報を扱うクラスとなります。
記録したい時、アプリケーション側からこのクラスに必要な(記録する)データを設定し、
実際にDBを記録する時はこのクラスに設定されている情報を参照して記録するという流れになります。
記録する為だけでなく、検索を行う為の文字列も扱っています。


●src/jp.app.nikkibybrightsystemdb/RecordItem.java

3-2.DataBase生成クラス (Class:DatabaseOpenHelperItem)

データベースのオープンやクローズ、生成を行ったりします。
ちなみに生成について、onCreateが動作するのは初回アクセスした時だけです。
DataBaseのカラム名を設定して生成しているだけです。簡単ですね。
SQLiteOpenHelperを継承して実装してます。


●src/jp.app.nikkibybrightsystemdb/DatabaseOpenHelperItem.java

3-3.DataBaseアクセスクラス (Class:RecordDaoItem)

データベースに登録するデータなどは、先のRecordItemクラスに設定されています。次は設定されたデータをデータベースに反映します。
要はデータベースを操作するクラスというわけですね。アクセスする為の処理を記載しています。
今の日記アプリでは使っていませんが、削除処理もあった方が自然っぽかったので実装だけしています。


●src/jp.app.nikkibybrightsystemdb/RecordDaoItem.java

 
データベースの流れはなんとなく掴めたでしょうか。イメージはこんな感じです。
DB図

まだまだ続きますが、今回は以上です。
続きは次回、2011/08/08頃に公開の予定です。