2010年9月12日日曜日

Android プリファレンスの編集

Androidではプリファレンスと呼ばれるデータ永続化の方法が用意されています。
プリファレンスは、キーと値のセットでデータをxmlに保存します。
xmlファイルは「/data/data/<パッケージ名>/shared_prefs/<ファイル名>.xml」に作成されます。

プリファレンスを利用するには、SharedPreferencesオブジェクトを取得して操作します。
SharedPreferencesオブジェクトはContextクラスのgetSharedPreferences()メソッドで取得します。
SharedPreferences getSharedPreferences(String name, int mode)
引数
name:ファイル名
mode:以下のいずれかの定数を指定します。
MODE_PRIVATE 他のアプリからはアクセス不可
MODE_WORLD_READABLE 他のアプリからの読み込み可能
MODE_WORLD_WRITEABLE 他のアプリからの書き込み可能

プリファレンスへのデータ書き込みには、SharedPreferencesオブジェクトのedit()メソッドでSharedPreferences.Editorオブジェクトを取得します。
SharedPreferences.Editor edit()

SharedPreferences.EditorオブジェクトのputXxxx()メソッドなどで値を追加します。[
第二引数には設定項目が見つからなかった場合に利用する値を設定します。
SharedPreferences.Editor putString(String key, String value)
SharedPreferences.Editor putInt(String key, int value)
SharedPreferences.Editor putLong(String key, long value)
SharedPreferences.Editor putFloat(String key, float value)
SharedPreferences.Editor pubBoolean(String key, boolean value)
etc・・・

プリファレンスの値の削除は、SharedPreferences.Editorオブジェクトのremove()メソッドを使用します。
SharedPreferences.Editor remove(String key)

プリファレンスのすべてのキーと値を削除するには、SharedPreferences.Editorオブジェクトのclear()メソッドを使用します。
SharedPreferences.Editor clear()

最後にSharedPreferences.Editorオブジェクトのcommit()メソッドでプリファレンスデータを保存します。
boolean commit()

プリファレンスへのデータ読み込みには、SharedPreferencesオブジェクトのgetXxxx()メソッド等で値を取得します。
String getString(String key, String defValue)
int getInt(String key, int defValue)
long getLong(String key, long defValue)
float getFloat(String key, float defValue)
boolean getBoolean(String key, boolean defValue)
etc・・・


アプリケーションにはデフォルトのプリファレンスが1つ用意されており、プリファレンス名を指定せずに取得出来ます。
デフォルトのプリファレンスは常にMODE_PRIVATEです。
アプリケーションで1つしかプリファレンスファイルを利用せず、他のアプリケーションと共有しない場合には便利に利用できます。
デフォルトのプリファレンスを取得するには
SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context);



テキストボックスに入力した値をプリファレンスファイルに入出力するサンプルです。


ファイルは「/data/data/<パッケージ名>/shared_prefs/<ファイル名>.xml」に作成されます。


Writeボタンをクリックした後のプリファレンスファイル
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="TEXT">123456789</string>
</map>

AllClearボタンをクリックした後のプリファレンスファイル
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map />


MainActivity.java
※キーはわかりやすいようにベタ書きしていますが、実際はres/values/ids.xmlにnameとvalueを同じ値で定義するようにします。
package my.study.android;  

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends Activity {

    private static final String PREFERRENCES_FILE_NAME = "PrefrencesFile";
  
    /* WriteボタンClickリスナー */
    private OnClickListener btnWrite_OnClickListener = new OnClickListener(){
        public void onClick(View v) {btnWrite_OnClick(v);}};
    /* ReadボタンClickリスナー */
    private OnClickListener btnRead_OnClickListener = new OnClickListener(){
        public void onClick(View v) {btnRead_OnClick(v);}};
    /* AllClearボタンClickリスナー */
    private OnClickListener btnAllClear_OnClickListener = new OnClickListener(){
        public void onClick(View v) {btnAllClear_OnClick(v);}};
 
    /*
     * onCreate
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //Writeボタン
        Button btnWrite = (Button)this.findViewById(R.id.btnWrite);
        btnWrite.setOnClickListener(btnWrite_OnClickListener);
        //Readボタン
        Button btnRead = (Button)this.findViewById(R.id.btnRead);
        btnRead.setOnClickListener(btnRead_OnClickListener);
        //AllClearボタン
        Button btnAllClear = (Button)this.findViewById(R.id.btnAllClear);
        btnAllClear.setOnClickListener(btnAllClear_OnClickListener);
    } 
 
    /*
     * Writeボタン処理
     */
    private void btnWrite_OnClick(View v){
        //プリファレンスのインスタンスを取得
        SharedPreferences pre = this.getSharedPreferences(PREFERRENCES_FILE_NAME, MODE_PRIVATE);
        //デフォルトプリファレンスのインスタンスを取得する
        //SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);
        //プリファレンスのエディタを取得
        SharedPreferences.Editor editor = pre.edit();
        //テキストボックスの値を書き込み
        EditText text = (EditText)this.findViewById(R.id.text);
        editor.putString("TEXT",text.getText().toString());
        //保存
        editor.commit();
    }
 
    /*
     * ReadボタンClick処理
     */
    private void btnRead_OnClick(View v){
        //プリファレンスのインスタンスを取得
        SharedPreferences pre = this.getSharedPreferences(PREFERRENCES_FILE_NAME, MODE_PRIVATE);
        //デフォルトプリファレンスのインスタンスを取得する
        //SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);
        //読み込み
        String str = pre.getString("TEXT", "NONE");
        //テキストボックスに表示
        EditText text = (EditText)this.findViewById(R.id.text);
        text.setText(str);
    }
 
    /*
     * AllClearボタン処理
     */
    private void btnAllClear_OnClick(View v){
        //プリファレンスのインスタンスを取得
        SharedPreferences pre = this.getSharedPreferences(PREFERRENCES_FILE_NAME, MODE_PRIVATE);
        //デフォルトプリファレンスのインスタンスを取得する
        //SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);
        //プリファレンスのエディタを取得
        SharedPreferences.Editor editor = pre.edit();
        //すべての設定を削除
        editor.clear();
        //保存
        editor.commit();
    }

}

main.xml(MainActivityのレイアウト)
<?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"
    >



<EditText android:text="@+id/EditText01" android:id="@+id/text" 
 android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>

<Button android:layout_width="wrap_content" android:layout_height="wrap_content" 
 android:text="Write" android:id="@+id/btnWrite"></Button>
 
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" 
 android:text="Read" android:id="@+id/btnRead"></Button>
 
<Button android:text="AllClear" android:id="@+id/btnAllClear" 
 android:layout_width="wrap_content" android:layout_height="wrap_content">
</Button>
</LinearLayout>

【関連項目】
Android プリファレンスの編集
Android アプリ設定画面を作成する
Android アプリ設定画面を作成する CheckBoxPreference
Android アプリ設定画面を作成する EditTextPreference
Android アプリ設定画面を作成するRingtonePreference
Android アプリ設定画面を作成するListPreference
Android アプリ設定画面を作成する 依存関係を設定する
Android アプリ設定画面を作成する PreferenceScreen
Androidアプリ設定画面を作成する PreferenceScreen(別アクティビティ)

0 件のコメント: