この記事ではSharedPreferenceを用いたデータの保存方法・読み込み方法を説明しています。
=== 目次 ===
データの保存方法
以下が”id”というタグに”1″という値を保存するサンプルコードです。各コードの説明はサンプルコード下部に記載します。
public class MainActivity extends Activity {
final static String FILENAME = "Preference.xml";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sp = this.getSharedPreferences(FILENAME, Context.MODE_PRIVATE);
SharedPreferences.Editor e = sp.edit();
e.putInt("id", 1);
e.apply();
}
}
SharedPreferencesのオブジェクト取得
SharedPreferences sp = this.getSharedPreferences(FILENAME, Context.MODE_PRIVATE);
ContextオブジェクトからgetSharedPrefrencesメソッドを使用してSharedPrefrencesのオブジェクトを取得します。getSharedPreferencesの引数は以下の通りです。
- 第1引数: 保存ファイル名です。
- 第2引数: 保存モードです。MODE_PRIVATEを選択すると、xmlを作成したアプリからのみアクセス可能となります。通常はMODE_PRIVATEを選択すれば良いでしょう。他の候補はこちらを参照ください。
SharedPreferences.Editor e = sp.edit();
e.putInt("id", 1);
e.apply();
まず、editメソッドでEditorオブジェクトを取得します。次にputメソッドを用いて、値をEditorオブジェクトに収納します。
ここでは、int型の値を保存する例ですのでputIntメソッドを使用しています。
他のputメソッドにはputString, putBoolean, putLong, putFloatがあります。
putメソッドの第1引数はタグ名、第2引数は値です(int以外の変数型でも同様です)。
最後にapplyメソッドを使用してxmlに保存します。
保存可能な変数型 と 任意のオブジェクトを保存する方法
SharedPreferencesで保存可能な変数型は以下の5つです。- String型
- boolean型
- int型
- long型
- float型
そのJSONをputStringメソッドでSharedPreferenceに保存すれば、任意のオブジェクトを保存することが可能です。
詳しくは以下の記事にまとめています。
xmlの保存場所
SharedPreferencesで保存したxmlは以下の場所に保存されます。data -> data -> パッケージ名 -> shared_prefs
データの読み出し方法
以下がさきほど保存したタグ名”id”の値を読み出すサンプルコードです。SharedPreferences sp = this.getSharedPreferences(FILENAME, Context.MODE_);
int value = sp.getInt("id", -1);
ここではint型の値を読み出すのでgetIntメソッドを使用しています。他のgetメソッドにはgetString, getBoolean, getLong, getFloatがあります。
getIntメソッドの第1引数はタグ名、第2引数はタグがxmlに存在しないときに返す値です。
よって、このサンプルコードにおいて、もし”id”のタグがなかれば-1の値が返ります。
オススメの使い方
私のオススメのSharedPreferencesの使用方法を紹介します。まず、以下のようなSharedPreferences管理用のクラスを作成します。
SharedPreferencesManager.java
public class SharedPreferenceManager {
final static String FILENAME = "Preference.xml";
final static String Id = "id";
SharedPreferences sp;
SharedPreferenceManager(Context context) {
sp = context.getSharedPreferences(FILENAME, Context.MODE_PRIVATE);
}
private void setValue(String tag, int value) {
SharedPreferences.Editor e = sp.edit();
e.putInt(tag, value);
e.apply();
}
void setId(int value) { setValue(Id, value); }
int getId() { return sp.getInt(Id, -1); }
}
次に以下の記事で紹介しているApplication継承クラスにこのSharedPreferencesManagerのオブジェクトを持たせます。
サンプルコードは以下です。Common.java
public class Common extends Application {
SharedPreferencesManager spm;
@Override
public void onCreate() {
super.onCreate();
spm = new SharedPreferencesManager(this);
}
}
このようにしておくことで、プロジェクト全体で簡単にSharedPreferencesにアクセスできます。以下がその場合のサンプルコードです。
MainActivity.java
public class MainActivity extends Activity {
Common c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
c = (Common)getApplication();
int value = c.spm.getId();
}
}
まとめ
この記事ではSharedPreferencesを用いたデータの保存方法・読出方法を紹介しました。ローカルデータの保存方法には、他にSQLiteデータベースやStreamを用いた方法があります。
それぞれの方法のメリット・デメリットは以下の記事にまとめていますので、気になった方はご覧ください。
