Androidアプリのローカルデータ保存 〜Preference〜
Androidアプリにおけるローカルへのデータ保存として、以下の方法が考えられます。
- Preference : PreferenceActivityクラスを継承し、XMLファイルに保存
- File : ローカルファイルシステムへファイルとして保存
- SD Card : ファイルでの保存だが、保存先はSDカード
- DataBase : SQLiteへの保存
今回は、設定値などの保存に使用する"Preference"を試しました。
サンプルとして、設定画面(Settings.class)でユーザIDとパスワードを設定し、確認画面(ShowVal.class)で値を取得・確認するアプリを作成しました。
(設定画面)
// Settings.java // package com.example.SampleApp; import android.os.Bundle; import android.content.Context; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; public class Settings extends PreferenceActivity { // PreferenceActivityの継承 private static final String OPT_ID = "id"; private static final String OPT_PASS = "pass"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.settings); } public static String getID(Context context) { // ID用ゲッタの定義 return PreferenceManager.getDefaultSharedPreferences(context).getString(OPT_ID, ""); } public static String getPass(Context context) { // PASSWORD用ゲッタの定義 return PreferenceManager.getDefaultSharedPreferences(context).getString(OPT_PASS, ""); } }
<!-- settings.xml --> <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <EditTextPreference android:key="id" <!-- 設定項目見出し(画面イメージ-1) --> android:title="ID" <!-- 設定項目下の説明(画面イメージ-1) --> android:summary="Enter ID" <!-- 入力画面項目の説明(画面イメージ-2) --> android:dialogTitle="Enter ID" /> <EditTextPreference android:key="pass" android:title="PASSWORD" android:summary="Enter Password" android:dialogTitle="Enter Password" <!-- パスワード入力時にマスクされる(画面イメージ-3) --> android:password="true" /> </PreferenceScreen>
以下のような画面となります。
設定項目をタッチすると、設定入力画面が表示されます。
(画面イメージ-1)
(画面イメージ-2)
(画面イメージ-3)
次に、別画面から設定値を確認します。
(確認画面)
// ShowVal.java // package com.example.SampleApp; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ShowVal extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.showval); StringBuilder row = new StringBuilder(); String id; String pass; id = Settings.getID(getBaseContext()); // ゲッタを呼び出して、IDを取得 pass = Settings.getPass(getBaseContext()); // ゲッタを呼び出して、PASSWORDを取得 row.append(id).append("\n").append(pass); TextView tv = (TextView) findViewById(R.id.showval_content); tv.setText(row); } }
<!-- showval.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/showval_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> </LinearLayout>
Preferenceで保存した値は、"/data/data/%Package Name%/shared_prefs"配下に、"%Package Name%_preferences.xml"というファイル名で保存されます。
今回のサンプルアプリの場合は、以下のように保存されます。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="pass">password</string> <string name="id">test-user</string> </map>