Androidアプリ作成日記

プログラミング初心者が、Androidアプリを作ります

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

家計簿アプリその9、日付とリンク

久々のプログラミングです。
今回は日付のリンク、つまり日付が変わったら表示もかわる、
っていうプログラミングを作りたいと思います。

どうやるかをまず考えたんですが、テーブル名を日付にしてしまおうと考えました。


つまり、
        final Calendar calendar = Calendar.getInstance();
        final int year = calendar.get(Calendar.YEAR);
        final int month = calendar.get(Calendar.MONTH);
        final int day = calendar.get(Calendar.DAY_OF_MONTH);
        String tablename = String.valueOf(year)+"-"+String.valueOf(month+1)+"-"+String.valueOf(day);
と書きます。まずCalendarクラスのYEAR(年)、MONTH(月)、DAY_OF_MONTH(日)を取得します。
次に、tablenameを日付にします。String.valueOfメソッドで、整数を文字列に変換します。
月はなぜか値が最初は-1されてるので、+1しときます。これでtablenameは2011-3-10とかになるはずです。

で、このテーブル名で画面表示時にテーブルを作成します。画面表示時なので、Activityクラスに書きます。
        String sql = "";
        sql += "create table "+"_"+tablename+"_"+" (";
        sql += "_id integer primary key";
        sql += ",Koumoku text not null";
        sql += ",Utiwake text";
        sql += ",Kingaku text";
        sql += ")";
        db.execSQL(sql);
		}
これの意味をおさらいすると、まずsqlという文字列に、
create table 'tablename' (_id integer primary key,Koumoku text not null,Utiwake text,Kingaku text)
という文を入力し、次にexecSQL(sql)としてテーブルの定義を決める、という処理をやっています。
テーブルネームを' 'で囲んだのは、テーブルネームの終始が数字だとなんかエラーになるからです。
' 'はコマンドプロンプトやターミナルでテーブル名を見るときは表示されないので注意が必要です。
これでやってみたら無事にうまくいきました・・・が、もう一度起動してみたらエラーになりました。
これは、コードをActivityクラスに書いたので、もう一回同じ名前でテーブルを作ろうとしたためです。
ではどうするかと言うと、ある定数を用意して、最初はその定数の値を0とし、
一回テーブルを作ったらその定数の値を1とし、定数が0のときだけテーブルを作る、という風にしてみます。
このために、保存方法の一つ、プリファレンスを使います。
プリファレンスとは値を保存する方法で、キーと呼ばれる者に値を入れておく事が出来ます。
では実際のコードを書いてみます。
        String prefname=String.valueOf(year)+"-"+String.valueOf(month+1);
		SharedPreferences pref = getSharedPreferences(prefname,
                MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
			int str = pref.getInt(tablename, 0);
                        if(str==0){
        [テーブル作成のコード]
        ]
               Editor e = pref.edit();
		e.putInt(tablename, 1);
		e.commit();
まず、プリファレンスの名前を、「2011-3」にし、そのうちのキーをtablenameにします。
つまりキーとtablenameが同じになり、毎日ごとにtablenameとキーが変わる訳です。
MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE、とは、他アプリからも読み書き可、という意味です。
最初はキーに何も書き込まれていないため、値は0になります。
よってif文が成り立つため、テーブルを作成します。
そしてテーブル作成後にputIntメソッドでキーに1が保存されます。
これで、次からはif文の中身を読まれる事はなくなり、エラーは起こらなくなります。
プリファレンスの中身は、コマンドプロンプトorターミナルで、adb shellをやった後に、
cd /data/data/プロジェクトネーム/shared_prefs と打ち込み、lsコマンドで表示されます。

という風に、無理矢理プログラムを作ってみました。
エミュレータを何回か起動してもうまくいったので、多分これで大丈夫だと思います。
そのうちなんかしらエラーが出そうでこわいですが・・・。

次は、カレンダー画面を作ります。


Androidアプリ開発ランキング

  1. 2011/03/15(火) 15:23:38|
  2. 家計簿アプリ
  3. | トラックバック:0
  4. | コメント:0
<<クラスの名前 | ホーム | 大震災>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://andromaker.blog98.fc2.com/tb.php/48-1db688a2
この記事にトラックバックする(FC2ブログユーザー)


カテゴリ

家計簿アプリ (15)
アプリ作成 (練習) (7)
プログラム用語 (1)
エラー (3)
環境設定 (8)
サイト関連 (3)
雑談 (9)
ニュース (1)
未分類 (2)
書籍紹介 (1)
iPhone (1)

Android書籍

スマートにプログラミング
Android入門編


初歩からわかるAndroid
最新プログラミング


Google Android
プログラミング入門


AndroidアプリUIデザイン
&プログラミング


Android SDK
逆引きハンドブック

月別アーカイブ

最新コメント

最新トラックバック

最新記事

RSSリンクの表示

カウンター

アクセスランキング

アクセスランキング

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。