2013年1月16日水曜日

アプリ内の情報を保存する(PreferenceManager, SharedPreferences)


アプリ内で情報を保存する方法として、

SQLiteのDBに保存
端末に保存
Webサーバーにポストして保存
等々

いろいろありますが、
今回は端末内に情報を保存する
PreferenceManagerを紹介します。

Preferenceは端末内にxmlファイルを作成して、
そのxmlファイルを読み書きすることで、
保存データの読み書きを行っております。

Preferenceはプリファレンスと言われているらしいです。
自分は心の中で、プレファレンスと呼んでしました。。。

それはおいといて、


使い方はiPhoneアプリと同じような方法で、
キーとアイテムを紐づける
Dictionayのような使い方をします。

また、使用方法として、下記の3点があります。

1.初期設定のxmlファイルを使う方法
2.xmlファイルを自分の好きなファイル名で保存する方法
3.Activityごとに作成する方法

2.3の方法だと、他のアプリからの読み書きを許可したりすることが、
でき利便性に優れてますが、とりあえずは使用頻度の高い3の方法を紹介します。


■保存する
public static void Set_Save(String sKey,String value ,Context mCon){
    SharedPreferences shPref = PreferenceManager.getDefaultSharedPreferences(mCon);
    Editor ed = shPref.edit();
    ed.putString(sKey, value);
    ed.commit();
}

このような関数を作成すれば、だいたい完成です。

sKeyというのが、保存データの主キーです。
Contextはメインアクティビティーから、getApplicationContext()を
渡しましょう。

関数内の流れとしては、プリファレンスを生成して、プリファレンスにエディッターを通して、
キーとアイテムを保存するイメージですかね。

また、putStringは数値型だとputIntのように型によって、変わります。
putFloat, putLong, putBoolean
等々あるらしいです。

■保存内容を取得
public static String Get_Save(String sKey,Context mCon){
    SharedPreferences shPref = PreferenceManager.getDefaultSharedPreferences(mCon);
    return shPreferences.getString(sKey, "");
}


こちらもgetStringが型により変わりますので、
ご注意を
(getInt, getFloat, getLong, getBoolean等々)

また。get~でキーが見つからない場合には、
空の値が返ってきます。NULLではないです。

■保存しているかの確認
public static Boolean Chk_Save(String sKey,Context mCon){
    SharedPreferences shPref = PreferenceManager.getDefaultSharedPreferences(mCon);
    return shPreferences.getBoolean(sKey, false);
}

キーで作成したデータが存在するかを確認する関数です。
個人的には特に使う必要はないと思っていますが、
よかったら覚えておいてください。



■2.の方法を紹介
SharedPreferences sShPrefName = getSharedPreferences("好きなファイル名", MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);

getSharedPreferencesの第一引数には保存するファイル名で第二引数はファイルアクセス許可を記述します。

MODE_WORLD_WRITEABLE  他のアプリからの書き込みOK
MODE_WORLD_READABLE   他のアプリからの読み込みOK
MODE_PRIVATE         作成したアプリからのみアクセスOK

上のソースは他のアプリからの読み書きを許可しています。
生成した後の使い方は3.と同じです。

■3.の方法を紹介
SharedPreferences sShPrefClass = getPreferences(MODE_PRIVATE); 

生成後は上記に同じです。


以上になります。

がんばって、Sharedpreferenceについて紹介いたしましたが、
端末内に保存する情報は消えるリスクが高いので、(水没、紛失、意図的)
大事な情報はサーバーで管理しましょうね。

0 件のコメント:

コメントを投稿