概要
状態:学習中
閲覧数:2,224
投稿日:2013-09-03
更新日:2013-10-09
・エミュレータでの動作確認できた(音声認識部分は未確認)ので、これより内容理解に挑戦
仕様
画面一覧
画面一覧
N | 画面名 | 内容 | クラス名 |
---|---|---|---|
1 | 月別 | 「指定月に書いた日記内容」を一覧表示している画面 | ActivityTop |
2 | 日記入力 | 日記を実際に入力する画面 | ActivityAdd |
3 | 日別 | 日毎の個別日記内容全文を掲載している画面 | ActivityView |
4 | 編集 | (過去に入力した)日記を編集する画面 | ActivityEdit |
・あるいは「ActivityTop」て書いているから、デフォルトでは月別画面が初期表示画面なのだろうか?
・もしくは単に、データを閉じていない、だけとか?
データベースクラス
考え方
・基本的にほぼ定例処理
・定数等を一部書き換えるだけ
・役割によって、3つのクラスに分かれている
繋がり
・「2.データベース操作クラスRecordDaoItem.java」と「3.レコード情報クラスRecordItem.java」の間に直接の相関関係はない
※「データベース操作クラスRecordDaoItem」ファイル上で、「レコード情報クラスRecordItem」を読み込んで、何か処理をすることはない
実際の処理の仕方
1.「ActivityTop.javaのようなアクティビティを実装したファイル」で両者を読込
2.「データベース操作クラスRecordDaoItem」のインスタンスを作成
3.上記インスタンスのメソッドで、引数として渡した「レコード情報クラスRecordItem」を処理
※つまり、下記のように実際にインポートするのは、アクティビティ系のファイルとなる
import android.style.systemdb.RecordItem;
import android.style.systemdb.RecordDaoItem;
1.データベース生成クラス
DatabaseOpenHelperItem.java
・データベースのオープンやクローズ、生成
※SQLiteOpenHelperを継承して実装
・データベースを利用するためには、 SQLiteOpenHelperクラスが必要なの?
・SQLiteOpenHelperクラス
・ちなみに、家計簿アプリでの同等クラスは▼/src/com/fc2/blog98/andromaker/housekeepingbook/SubOpenHelper.java
public class SubOpenHelper extends SQLiteOpenHelper
処理の流れ
1.データベース名を定数指定
・「private static final String」で、データベース名を定数として文字列指定
2.コンストラクタ第2引数に、データベース名を指定
・1で指定したデータベース名定数を、 コンストラクタ第2引数に指定
・データ保存場所 … ▼/data/data/<パッケージ名>/database/<ファイル名>
3.onCreateメソッドが呼ばれる
・onCreateが動作するのは初回アクセス(データベース作成)した時だけ
* コード的には、コンストラクタに渡されたDBファイル名が存在しない場合に呼ばれる
つまり?
・初回アクセス時 … 「データベース」「テーブル」作成 & 「データベース」の「オープン」「クローズ」
・次回アクセス時 … 「データベース」の「オープン」「クローズ」
2.データベース操作クラス
RecordDaoItem.java
・「3.レコード情報クラス」で設定したデータを、実際にデータベースへ反映するためのクラス
具体的なメソッド別内容
・レコード保存
・レコード更新
・レコード削除
・レコード全件削除
・idでRecordをロード
・検索
3.レコード情報クラス
RecordItem.java
▼/src/jp/app/nikkibybrightsystemdb/RecordItem.java
・レコード操作したい時、アプリケーション側からこのクラスに必要な(操作する)データを設定し、
・実際にレコード操作する時はこのクラスに設定されている情報を参照して実行するという流れ
・検索を行う為の文字列も扱う
定数
・「テーブル名」「カラム名」を定数指定
・public static final String
具体的な内容
・「テーブル名」「カラム名」定数
・プロパティ
・プロパティを操作するメソッド(セッター/ゲッター)
・ListViewで表示するためのメソッド
Serializable
java.io.Serializableインタフェース
・オブジェクトをシリアライズ可能にするには、そのクラスがjava.io.Serializableインタフェース(以下、Serializableインタフェース)を実装する必要がある
import java.io.Serializable;
@SuppressWarnings("serial")
public class RecordItem implements Serializable{
注意事項
・実装クラス内のフィールドはプリミティブ型(intやboolean)か、もしくはシリアライズ可能なクラスでなければならない
オブジェクトのシリアライズで使用されるクラス
・ObjectOutputStreamクラス
・ObjectInputStreamクラス
・しかし、何れも使用されている形跡がない
・しかも、クラス定義時の「implements Serializable」をコメントアウトしてもエラーにならない
・どゆこと?
テーブル構成
コマンド履歴
Active code page: 65001
C:\Users\Administrator>adb shell
# cd data/data/jp.app.nikkibybrightsystem/databases
# sqlite3 NIKKIBYBRIGHTSYSTEM_ITEM
sqlite> .headers on
sqlite> select * from tbl_nikkibybrightsystem;
_id|itemnikki|nen|tuki|hi
1|初めて起動した|2013|9|2
カラム一覧
カラム名 | _id | itemnikki | nen | tuki | hi |
---|---|---|---|---|---|
内容 | id | 内容 | 年 | 月 | 日 |
入力例 | 1 | 初めて起動した | 2013 | 9 | 2 |