連載
» 2011年11月25日 11時12分 公開

Android技術者認定試験「ACE」ドリル(7):アプリ開発に必須、Androidのストレージ (2/2)

[奥 崇(elan),@IT MONOist]
前のページへ 1|2       

解答

演習1:答え(2)

 Context#openFileOutputメソッドは、書き込み可能なファイルストリームを取得できるメソッドになります。

 Androidのアプリケーションは、これを用いてファイルの書き出しを行うことができます。なお、このメソッドには引数が2つあり、第一引数に「ファイル名」、第二引数にアクセスの「モード」を設定します。設定可能なモードとその意味については、以下の表1を参考にしてください。


モード 概要
MODE_PRIVATE 自アプリからのみアクセス可能なファイル作成
MODE_APPEND 既に存在するファイルに、追加書き込み状態でオープン
MODE_WORLD_READABLE 他のアプリからも読み込み可能なファイル作成
MODE_WORLD_WRITEABLE 他のアプリからも読み書き可能なファイル作成
表1 モードの一覧

 なお、ファイルの保存先ディレクトリは、「/data/data/パッケージ名/files」ディレクトリと決められています。よって演習1は(2)が正解となります。

演習2:答え(1)

 SharedPreferencesとは、key-value型で値を保持する機能になります。設定した値は、最終的にはXML形式で保存されますので、オブジェクトをそのまま保存することはできません。その名の通り“プレファレンス(初期設定)”の保存などの、フラグ系の保存に適した機能になります。

 演習2にあるコードですが、このコードには誤りはありません。

01: SharedPreferences sp = getSharedPreferences("context", MODE_PRIVATE);
02: SharedPreferences.Editor editor = sp.edit();
03: 
04: editor.putString("userName", "Test");
05: editor.commit();
06: 
07: Log.v("@IT",sp.getString("UserName", "ERROR"));

 まず、1行目のgetSharedPreferencesメソッドで、設定したXMLを読み込んでいます。この場合、第一引数に指定した“context”により、context.xmlが取得できます(context.xmlが存在しない場合は作成します)。また、第二引数ではアクセス権を指定しています。「MODE_PRIVATE」とすると、このアプリケーションからしか見られなくなります。通常はそれで問題ないでしょう。

 2行目では、値の設定に用いるSharedPreferences.Editorのオブジェクトを、SharedPreferences#editメソッドにより取得しています。

 4行目では、SharedPreferences.Editor#putStringメソッドで、実際に値をセットしています。第一引数がkey、第二引数がvalueとなります。

 5行目では、SharedPreferences.Editor#commitメソッドで、実際に設定した値を書き込んでいます。こちらを忘れると保存されませんので注意してください。

 7行目はログの出力です。ログのメソッドの第二引数には、ログのメッセージ欄に表示する文字列を指定しますが、今回はsp.getString("UserName", "ERROR")としています。これはSharedPreferences#getStringメソッドになりますが、第一引数に値を取得するためのkey、第二引数に値が取得できなかった際に返す文字列を指定しています。今回は、第一引数のkeyを“UserName”と指定していますが、4行目の書き込み時は“u”が小文字の“userName”をkeyとして登録しています。そのため、このメソッドの戻り値は“ERROR”となります。よって、演習2の正解は(1)となります。このように大文字と小文字の区別がありますのでご注意を!

 演習2は基礎編の割に少々難しい問題でしたが、SharedPreferencesの実装は、いわば“お約束”のコーディングになりますので、この機会に一度しっかりと覚えてしまいましょう。

 ちなみに、この実行結果として生成されたcontext.xmlは、「/data/data/パッケージ名/shared_prefs」ディレクトリに保存されます。また、中身は以下のようになります。

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
  <map>
    <string name="userName">Test</string>
  </map>

演習3:答え(3)

 SQLiteをAndroidで扱う場合、アプリケーションフレームワークに用意されている2つのクラスを使うことになります。1つは、データベースに対して、実際のCRUD操作を行う「SQLiteDatabase」クラスとなります。例えば、検索したい場合はSQLiteDatabase#queryメソッドを用いることによって実現できます。

 もう1つ、データベースやテーブルの作成を行う際に用いる「SQLiteOpenHelper」クラスがあります。このクラスは、抽象クラスとして用意されていますので、開発者がこのクラスを継承したクラスを作成する必要があります。その拡張したクラスのコンストラクタでデータベースの作成、onCreateメソッドでテーブルの作成を行い、初期のセットアップを行います。

 上記より、演習3は(3)が正解となります。



 以上で、ストレージに関する演習は終了です。前回も記しましたが、これまで取り上げた単元は、総じて「ACE(OESF Authorized Certification Engineer for Android)」試験の出題頻度の高いものばかりです。ATSSの一覧表で確認してみると、まだ半分程度しか消化していないように思えますが、それ以上に合格へと近づいているはずです!

 さて、次回は「通信」について学んでいきます。サーバサイドと連携するアプリケーションには必須の知識になります。それでは次回もご期待ください! (次回に続く)

ACEアプリベーシック試験対応イーラーニング(サンプルIDプレゼント中)


Androidコーナー

Androidコーナー
「Android(アンドロイド)」の組み込み機器への適用からアプリ開発、レポート、ニュースなどさまざまな技術情報・最新動向をお届けする!!

>>コーナーTOPはこちらから


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.