やまものブログ

メモ書きブログです (^_^;A

SimpleDateFormat() の警告は ", Locale.US" 追加で回避

先週からようやく、
に着手して、LESSON 11 (「メモ帳アプリ」の出だし)だけ動作確認できていました。

今週は「メモ帳アプリ」の残り LESSON 12~17 をすすめました。ダウンロードできる android10.lzh から各LESSON 用のプロジェクトを毎回 import します。その際の前処理は基本的に LESSON 11 と同じですが、警告への対策も少し追加して以下のようにしました。


【LESSON 用プロジェクトの import 前処理】

1) proguard.cfg ファイルを削除
$ rm proguard.cfg

2) AndroidManifest.xml (androidmanifest.xml ) の修正
 【編集前】  android:minSdkVersion="9" />
 【編集後】  android:minSdkVersion="16" />

3) default.properties の修正
 【編集前】  target=android-9
 【編集後】  target=android-16

4) ファイル名の大文字小文字変更(1)
$ mv androidmanifest.xml AndroidManifest.xml

5) ファイル名の大文字小文字変更(2)
5-1) java ファイルを見つける
$ find . -name "*.java"
./gen/jp/co/se/android/chapter04/r.java
./src/jp/co/se/android/chapter04/listmain.java
./src/jp/co/se/android/chapter04/memoactivity.java

5-2) r.java を R.java に変更
$ cd gen/jp/co/se/android/chapter04
$ mv r.java R.java

5-3) ファイル名をクラス名に合わせて大文字小文字を変更
$ cd ../../../../../../
$ cd src/jp/co/se/android/chapter04/
$ mv listmain.java ListMain.java
$ mv memoactivity.java MemoActivity.java


【補足】
1) のファイル proguard.cfg は Eclipse 上で警告マークがついていて、このファイルを削除したら解消しました。今、試すと警告メッセージが再現しないので詳細は不明ですが、このファイルが無くてもプロジェクトは動くので削除しておくことにしています。

2), 3) については前回述べたとおりで Android 4.1.2 (API 16) を使うために変更しています。なお、実行の確認には、以前作成した Android 4.3 (API 18) のエミュレータが使えています。

4), 5)  のファイル名の大文字小文字があわない問題は、サンプルが Windows ベースで作成されているのが原因かもしれません。行末に ^M もあるので、Windows版であることは間違いありません。あるいは、古い Android 2.3 ベースで作成されいてるのが原因かもしれませんが、よくわかりません。Windows 版 ADT が手元にあれば確認するのですが。


以上の修正の後、eclipse にて File → import でプロジェクトを読み込みます。

この import 直後の状態で、エディターのタブ領域あたりを右クリックして "Close All" をするのがオススメの操作です。これでエディターで開いている全てのタブが閉じられます。
この教材では、各 LESSON ごとにプロジェクトを読み込むため、前回のプロジェクトで編集したファイルが開いたままになっていることが多いです。このため、import した今回分ではなく、前回のソースを編集してしまうという失敗を LESSON 12 ではやらかしました。意味不明な状況にハマってしまったので、その反省が "Close All" です。

教材の進め方は、import したプロジェクトの一部を編集したり、GUI 上で追加・修正することで、各LESSON でポイントとなる知識を体験するという形式です。XMLJava のソースは書籍に青字で表示されている内容を入力・変更します。import しなければらならないパッケージについては、各ページの右側にコメントされているので、読み落とさないように注意します。


「メモ帳アプリ」は LESSON 17 で完成です。これで、下記のような、今月の日付のリストが表示されて、各日付をクリックするとメモを入力・保存できます。
イメージ 1

実行したメモ帳は、エミュレータ上でもアプリとして登録されています。
イメージ 2

上記の "Chapter04" をクリックすると詳細メニューもあり、Uninstall でエミュレータ上から消すことができます。
イメージ 3


そういえば、上記の日付をフォーマットする記述には下記の警告がでます。
To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale
locale) with for example Locale.US for ASCII dates.

この対策は、
SimpleDateFormat("yyyy/MM/dd (E)")
というメソッドに、第二引数を下記のように追加します。
SimpleDateFormat("yyyy/MM/dd (E)", Locale.US);

これにあわせて、"import java.util.Locale;" の宣言を追加する必要もあります。

なお、下記のように日本語を設定すると、エミュレータ上で日付をクリックしてもメモ編集画面に移動しなくなりました。
SimpleDateFormat("yyyy/MM/dd (E)", Locale.JAPANESE);
エミュレータが日本語版になっていないからなのでしょうか。とりあえず、英語版で先に進むことにします。


ここまでで最初のアプリ「メモ帳」まで進めることができました。感想ですが、Android 2.3 ベースなのでうまく動作するのかどうか不安でしたが、簡単な修正だけでそのまま使えています。また、書籍の解説は非常にためになっています。書籍に記載のサンプルを丸写ししているだけなのですが、自分で作業するといい経験になります。タイプミスの対策だけでも、Java/Android 未経験者にはいい練習ですので