ホーム >  Android > プリファレンス

Android -プリファレンス-

プリファレンス

プリファレンスは、JavaのMapインタフェースのように、保持するデータをキーと値の組み合わせで保存します。

保存先は、「data/data/パッケージ名/shared_prefs/ファイル名.xml」となります。

プリファレンスは、データ量やデータ形式に制限がありますので、いくつかの設定値を簡易的に保存したい場合に 適しています。

プリファレンスを利用するには、インタフェースSharedPreferncesオブジェクトを取得します。


・SharedPreferencesオブジェクトの取得

ContextクラスのgetSharedPreferencesメソッドで取得します。

SharedPreferences getSharedPreferences(String name ,int mode)
nameは、ファイル名、modeは、以下の定数を指定します。

モード 機能
Context.MODE_PRIVATE 他のアプリからアクセス不可
Context.MODE_WORLD_READABLE 他のアプリから読み込み可能
Context.MODE_WORLD_WRITEABLE 他のアプリから書き込み可能

SharedPreferencesインタフェース
interface SharedPreferences.Editor
SharedPreferencesインタフェースの主なメソッド
SharedPreferences
.Editor
edit() SharedPreferences.Editorオブジェクトの取得
boolean getBoolean(String key, boolean defValue) boolean型の値取得
defValueは、データが取得できなかった場合に使用する値
float getFloat(String key, float defValue) float型の値取得
defValueは、データが取得できなかった場合に使用する値
int getInt(String key, int defValue) int型の値取得
defValueは、データが取得できなかった場合に使用する値
long getLong(String key, long defValue) long型の値取得
defValueは、データが取得できなかった場合に使用する値
String getString(String key, String defValue) String型の値取得
defValueは、データが取得できなかった場合に使用する値

・SharedPreferences.Editorオブジェクトの取得

データを書き込んだり、変更したり、削除する場合、SharedPreferences.Editorインタフェースのインスタンスを SharedPreferencesのeditメソッドで取得します。


・SharedPreferences.Editorインタフェース

SharedPreferences.Editorインタフェースの主なメソッド
SharedPreferences.Editor putString(String key, String value) String型の値追加
SharedPreferences.Editor putBoolean(String key, boolean value) boolean型の値追加
SharedPreferences.Editor putFloat(String key, float value) folat型の値追加
SharedPreferences.Editor putInt(String key, int value) int型の値追加
SharedPreferences.Editor putLong(String key, long value) long型の値追加
boolean commit() 処理の反映
SharedPreferences.Editor clear() データのすべてを削除
SharedPreferences.Editor remove(String key) 指定キーのみのデータ削除

データの保存(プリファレンスの書き込み)

  1. SharedPreferencesオブジェクトの取得します。
  2. SharedPreferences.Editorオブジェクトの取得します。
  3. SharedPreferences.EditorインタフェースのputStringメソッドなどで保存するデータを「キー」と「値」をセットで追加します。

    すでに同じキーでデータが保持されている場合は、設定されている内容を上書き変更します。
  4. commitメソッドでデータ処理を反映させます。
    commitメソッドを実行しないとプリファレンスに反映されません。

データの取得(プリファレンスの読み込み)

  1. SharedPreferencesオブジェクトの取得します。
  2. SharedPreferencesインタフェースのgetString()メソッドなどで値を取得します。

データ削除

  1. SharedPreferencesオブジェクトの取得します。
  2. SharedPreferences.Editorオブジェクトの取得します。
  3. ・データをすべて削除する場合
        clearメソッドを実行
    ・指定したキーのみのデータ削除
        removeメソッドを実行
  4. commitメソッドでデータ処理を反映させます。
    commitメソッドを実行しないとプリファレンスに反映されません。

プリファレンスのサンプル

pref1

pref2

PreferenceEx

res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="フォント:"
            android:textSize="20sp" />

        <RadioGroup
            android:id="@+id/radio_group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkedButton="@+id/rb2"
            android:orientation="horizontal" >

            <RadioButton
                android:id="@+id/rb1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="明朝体" />

            <RadioButton
                android:id="@+id/rb2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ゴシック体" />
        </RadioGroup>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="スタイル:"
            android:textSize="20sp" />

        <CheckBox
            android:id="@+id/check_box"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="太字" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="保存" />

        <Button
            android:id="@+id/btn_show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="表示" />

        <Button
            android:id="@+id/btn_del"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="削除" />
    </LinearLayout>

    <TextView
        android:id="@+id/text_res"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:gravity="center_horizontal"
        android:textSize="20sp" />

</LinearLayout>


PreferenceEx.java

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.CheckBox;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class PreferenceEx extends Activity implements OnClickListener {
  private RadioGroup rg;
  private CheckBox checkBox;
  private String fontStyle;
  //改行コード
  private static final String BR=System.getProperty("line.separator");
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button btnSave = (Button) findViewById(R.id.btn_save);
    btnSave.setTag("save");
    btnSave.setOnClickListener(this);
    Button btnShow = (Button) findViewById(R.id.btn_show);
    btnShow.setTag("show");
    btnShow.setOnClickListener(this);
    Button btnDel = (Button) findViewById(R.id.btn_del);
    btnDel.setTag("del");
    btnDel.setOnClickListener(this);
    // ラジオグループオブジェクトの取得
    rg = (RadioGroup) findViewById(R.id.radio_group);
    // チェックボックスオブジェクトの取得
    checkBox=(CheckBox)findViewById(R.id.check_box);
  }
  @Override
  public void onClick(View v) {
    //タグの取得
    String tag=(String)v.getTag();
    //プリファレンスオブジェクトの取得
    SharedPreferences pref=getSharedPreferences("PreferenceEx", MODE_PRIVATE);
    //TextViewの取得
    TextView textRes=(TextView)findViewById(R.id.text_res);
    //プリファレンス編集用オブジェクトの取得
    SharedPreferences.Editor edit=pref.edit();
    //保存ボタン押下時の処理
    if(tag.equals("save")){
      //チェック済みのラジオボタンオブジェクトの取得
      RadioButton rBtn=(RadioButton)findViewById(rg.getCheckedRadioButtonId());
      String font=rBtn.getText().toString();
      //チェックボックスの状態取得
      if(checkBox.isChecked()){
        fontStyle="太字";
      }else{
        fontStyle="標準";
      }
      //プリファレンスに保存
      edit.putString("FONT", font);
      edit.putString("STYLE", fontStyle);
      //処理の反映
      edit.commit();
      //テキストビュー(メッセージ)の表示
      textRes.setText("保存しました。");
    }else if(tag.equals("show")){
      //保存データの読み込み
      String str1= pref.getString("FONT""データがありません");
      String str2= pref.getString("STYLE""データがありません");
      //テキストビュー(メッセージ)の表示
      textRes.setText("FONT:"+str1+BR+"STYLE:"+str2);
    }else if(tag.equals("del")){
      //すべてのデータを削除
      edit.clear();
      //処理の反映
      edit.commit();
      //テキストビュー(メッセージ)の表示
      textRes.setText("削除しました。");
    }
  }
}