プリファレンス
ファイルの中身を確認するにはroot化が必要になります。
root化とは当該ユーザーに管理者権限を与えることで、パソコンに例えるとわかり易いのですが、Windowsの場合はadministrator、Linuxの場合はrootが管理者権限を持ったユーザーに当たります。
Android端末は通常、root化されていません。
当然のことですが、Android端末の管理者権限を取得することは危険を伴います。操作によっては携帯電話としてのAndroid端末に、致命的な損傷を与えてしまう可能性があるからです。
次の図はroot化されていない端末をDDMSで確認した際の図です。
こちらはエミュレータをDDMSで確認した際の図です。
上下の図を比較するとわかりますがdataフォルダの中身は、上図のroot化されていない実機では確認できませんが、下図のエミュレータでは確認できることがわかります。
したがって、端末内に作成されたデータベース等を確認したい場合は、Android端末をroot化するか、エミュレータを使用しなければなりません。このテキストではエミュレータを用いて確認していきます。
※各Android端末のroot化方法などはインターネット上に数多く存在していますが、永久に使い物にならなくなる(いわゆる文鎮化)可能性も非常に高いので、どうしても実施したい場合は十分に注意をし、自己責任で実施してください。
プリファレンスはxml形式で記述されており、複雑なデータ等は保存できません。
したがって、主にアプリの設定情報といった単純なデータの保存に使用することが多いです。
プリファレンスに保存できるデータ型は次の5種類です。
- String
- int
- boolean
- long
- float
プリファレンスの保存先は「data/data/パッケージ名/shared_prefs/」です。
保存されたデータはアプリケーションを削除すると、すべて破棄されます。
また、root化された端末では他のアプリケーションのプリファレンスにアクセスできてしまうため、重要な情報(パスワード等)は暗号化して保存する機構が必要不可欠です。
プリファレンスはxmlファイルとして保存され、その中身は次のようになっています。
<string name=“SAMPLE_KEY”>SAMPLE_VALUE</string> <int name=“SAMPLE_INT_KEY”>100</int>
プリファレンスへのデータ保存方法
プリファレンスへデータを保存する方法は次のようになります。
- SharedPreferencesオブジェクトを取得
- Editorオブジェクトを取得
- putメソッドでデータを編集
- commitメソッドでデータを保存
getSharedPreferences()またはgetPreferences()を使用し、SharedPreferencesオブジェクトを取得します。
SharedPreferencesオブジェクトのedit()を使用し、Editorオブジェクトを取得します。
putBoolean()やputString()等のメソッドで値を追加します。
Editorオブジェクトのcommit()でデータをプリファレンスに保存します。
実際は以下のように記述します。ここではprefというxmlファイルを作成し「person」というキーと「山田」という値を保存しています。
SharedPreferences preferences= getSharedPreferences("pref", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("person", "山田"); editor.commit();
1行目のgetSharedPreferences()は、データを保存するファイルのファイル名(第一引数)と公開範囲(第二引数)を指定しています。
第二引数は公開範囲を指定しますが、指定できる値は次の3種類です。
定数名 | 概要 |
---|---|
MODE_WORLD_READABLE | 他のアプリケーションから読み取り可能 |
MODE_WORLD_WRITEABLE | 他のアプリケーションから書き込み可能 |
MODE_PRIVATE | 他のアプリケーションからアクセス不可 |
3行目のputBoolean()は、キーの名前(第一引数)と保存する値(第二引数)を指定しています。
上記の他にも値のデータ型により、下記のメソッドを使用します。
データ型 | メソッド |
---|---|
boolean | putBoolean(String key, boolean value) |
int | putString(String key, String value) |
String | putInt(String key, int value) |
long | putLong(String key, long value) |
float | putFloat(String key, float value) |
プリファレンスからのデータ取得方法
プリファレンスからデータを取得する方法は次のようになります。
- SharedPreferencesオブジェクトを取得
- getメソッドでデータを取得
getSharedPreferences()またはgetPreferences()を使用してSharedPreferencesオブジェクトを取得します。
getBoolean()やgetString()等を用いて値を取得します。
ここではprefというxmlファイルの「silentMode」というキーの値を取得しています。
SharedPreferences preferences = getSharedPreferences("pref", MODE_PRIVATE); preferences.getBoolean("silentMode", true);
2行目のgetBoolean()の第一引数はキーの名前を指定します。
第二引数は、第一引数にて指定したキーに対する値が見つからなかった場合に用いる値を指定します。
値が存在している場合は、その値を取得します。
activity_main.xml(レイアウトファイル)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名前を入力してください。" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登録" /> </LinearLayout>
MainActivity.java(Activityファイル)
package com.example.preferencesample; 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; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EditText editText = (EditText) findViewById(R.id.editText1); String str = editText.getText().toString(); SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("text", str); editor.commit(); Toast.makeText(MainActivity.this, str + "さんを登録しました。", Toast.LENGTH_SHORT).show(); } }); } }
サンプルアプリを実行し、名前を入力すると写真のようになります。
この段階で名前は保存されます。
EclipseのDDMSよりアプリを実行したエミュレータを確認すると下記場所にファイルが作成されます。
「data/data/com.example.preferencesample/shared_prefs/name.xml」
ファイルを選択し、赤枠のアイコンをクリックすると任意の場所にファイルを出力します。
出力したファイルを展開すると下記のようになっています。
キーは指定した「text」で、値は「Yamada」となっているのが確認できますね。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="text">Yamada</string> </map>
プリファレンスはこのようにしてキーと値を保存しています。