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 | 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) | 指定キーのみのデータ削除 |
データの保存(プリファレンスの書き込み)
- SharedPreferencesオブジェクトの取得します。
- SharedPreferences.Editorオブジェクトの取得します。
- SharedPreferences.EditorインタフェースのputStringメソッドなどで保存するデータを「キー」と「値」をセットで追加します。
すでに同じキーでデータが保持されている場合は、設定されている内容を上書き変更します。 - commitメソッドでデータ処理を反映させます。
commitメソッドを実行しないとプリファレンスに反映されません。
データの取得(プリファレンスの読み込み)
- SharedPreferencesオブジェクトの取得します。
- SharedPreferencesインタフェースのgetString()メソッドなどで値を取得します。
データ削除
- SharedPreferencesオブジェクトの取得します。
- SharedPreferences.Editorオブジェクトの取得します。
-
- ・データをすべて削除する場合
- clearメソッドを実行
- ・指定したキーのみのデータ削除
- removeメソッドを実行
- commitメソッドでデータ処理を反映させます。
commitメソッドを実行しないとプリファレンスに反映されません。
プリファレンスのサンプル
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("削除しました。");
}
}
}