Androidアプリのローカルデータ保存 〜Preference〜

Androidアプリにおけるローカルへのデータ保存として、以下の方法が考えられます。

  1. Preference : PreferenceActivityクラスを継承し、XMLファイルに保存
  2. File : ローカルファイルシステムへファイルとして保存
  3. SD Card : ファイルでの保存だが、保存先はSDカード
  4. 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>

以下のような画面となります。
(画面イメージ-4)


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>