Androidアプリのデータ保存方法の「プリファレンス」の使い方は?
Androidアプリでは、いくつかのデータ保存方法が用意されていますが、最も簡単に扱える方法が、この「プリファレンス(Preference)」であると思います。
プリファレンスは、データを、キー名と値の組み合わせで保存する形をとります。
JavaでいうHashTableや、VB等のDictionaryのような感じですね。
データの量や保存したい形にもよりますが、数個の設定値を保持させておきたいぐらいであれば、このプリファレンスで事足りると思います。
それでは、サンプルコードとともに、プリファレンスの使い方をみていきましょう。
プリファレンスの保存方法
まずは保存時の処理の説明です。
保存するデータの型は、boolean型、float型、int型、long型、String型が使えます。
String型のデータを保存するときは、以下のような感じになります。
SharedPreferences pref =
getSharedPreferences(“pref”,MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
Editor e = pref.edit();
e.putString(“key”, “value”);
e.commit();
まずは、getSharedPreferences()メソッドでSharedPreferences型インスタンスを取得します。
getSharedPreferences()の第一引数は、プリファレンスの名前です。
プリファレンス自体に名前を付けるという事です。
これは、保存するキーの名前とは別モノです。
一つのプリファレンスに対し、いくつかのキーが存在するので、保存するデータの親になるようなイメージですね。
getSharedPreferences()の第二引数は共有モードです。以下の値を指定できます。
MODE_WORLD_READABLE:他のアプリから読み取り可能
MODE_WORLD_WRITEABLE:他のアプリから書込み可能
MODE_PRIVATE:そのアプリケーションだけで使用可能
他のアプリから読み取りも書込みも可能にするには、サンプルコードのように論理和で結合させておきます。
なお、getSharedPreferences()の代わりに、getPreferences()というメソッドも使えます。
これは、自分のアクティビティのクラス名をプリファレンス名として、getSharedPreferences()を呼び出してくれるというメソッドで、引数は共有モードだけを指定します。
次は、SharedPreferencesのedit()メソッドを使って、Editor型インスタンスを取得します。
このEditorインスタンスを通じて、プリファレンスへのデータの書込みを行います。
書き込むデータの型により、putString()、putFloat()、putInt()、putLong()、putBoolean()等を使い分けましょう。
サンプルコードでは、String型なので、putString()を使っています。
第一引数はキー名で、第二引数は値になります。
最後に、Editorのcommit()メソッドを行う事で、実際に保存されます。
スポンサーリンク
プリファレンスの取得方法
次は、プリファレンスへ保存したデータの取得方法をみてみましょう。
SharedPreferences pref =
getSharedPreferences(“pref”,MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
String str = pref.getString(“key”, “”));
まずは、getSharedPreferences()メソッドを使って、SharedPreferences型インスタンスを取得します。
これは書き込み時と同じですね。
次はデータを取り出しますが、書込み時と同じく、保存されているデータの型により、getString()、getFloat()、getInt()、getLong()、getBoolean()等を使い分けます。
第二引数は、もしそのキーの値が存在しないときの初期値とする値を指定します。
もし、誤った型を指定すると、ClassCastExceptionが発生します。
他のアプリケーションのプリファレンスの取得方法
先ほどの例は、同じアプリケーションで保存されたプリファレンスの取得方法です。
プリファレンスは、別のアプリケーションからも読み取り、書込みを行う事ができます。
SharedPreferences型インスタンスを取得する方法だけが異なります。
String str;
try{
Context ctxt = createPackageContext(“パッケージ名”,0);
SharedPreferences pref =
ctxt.getSharedPreferences(
”pref”,MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
str = pref.getString(“key”,””));
}catch (NameNotFoundException e){
e.printStackTrace();
}
他のアプリケーションのプリファレンスを取り出す場合は、createPackageContext()メソッドを使って、Context型インスタンスを取得します。
createPackageContext()の第一引数は、取り出したいプリファレンスの持ち主となるAndroidアプリケーションのパッケージのフルパスを指定します。
第二引数は、オプションフラグを指定する、とAPIリファレンスに書いていますが、イマイチよくわかりません。
Android SDKをインストールしていれば、以下のパスにContextクラスのAPI仕様書がありますので、興味のある方はご一読下さい。(英語ですが。。。)
android-sdk-windows/docs/reference/android/content/Context.html
セキュリティ絡みだとは思いますが、詳細な意味がつかめませんでした。
また、Javaの基本の基本なのですが、一応補足しておきますと、 このcreatePackageContext()は、NameNotFoundExceptionをスローする可能性があるため、try-catch句で括っています。
プリファレンス(Preference)の基本的な使い方は以上です。
難易度も高くないですし、使いやすいと思います。
しかも、他のAndroidアプリケーションとの共有も可能なので、アイデア次第で色んなことができそうですね。
なお、複数行にまたがるテキストや、画像データなどを保存する場合は、「ローカルファイル」が適していると思います。
ローカルファイルに関する記事は以下になります。
Androidアプリのデータ保存方法の一つ「ローカルファイル」の使い方