mucchinのAndroid戦記

Androidアプリのデータ保存方法の一つ「プリファレンス」の使い方

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アプリのデータ保存方法の一つ「ローカルファイル」の使い方


スポンサーリンク

URL :
TRACKBACK URL :

Comments & Trackbacks

  • Comments ( 4 )
  • Trackbacks ( 2 )
  1. 素晴らしい!!

    3800円で買ったテキストより遥かに分かりやすいです。

  2. そうですか。それでは私の口座への振り込み先は…、
    というのは冗談です(笑)

    嬉しいコメント、ありがとう御座います。

  3. 参照させてもらいました。ブログよかったのででURLも張らせて貰いましたが、よくない場合は外しますのでお知らせください。
    よろしくお願いします。

  4. わざわざご連絡ありがとうございます。
    リンクを張って頂く事は、全く問題ありません。

Leave a Reply

*
*
* (公開されません)

CAPTCHA


*

Return Top