Androidアプリケーション開発において、設定情報やユーザーの選好を永続化するためには、SharedPreferencesがよく利用されます。この記事では、getSharedPreferencesメソッドとgetPreferencesメソッドの違いについて説明し、それぞれの適切な使用方法を実装例とともに紹介します。
これらのメソッドは、データの保存と読み込みを行うために共通のAPIを提供していますが、用途によって使い分ける必要があります。以下に、両者の特徴と実装例を示します。
まず、SharedPreferencesの操作をカプセル化したクラスを作成します。このクラスでは、ファイル名を指定する必要があるgetSharedPreferencesと、Activityに紐づくgetPreferencesの両方に対応するメソッドを提供します。
package com.example.sharedpreferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class PreferenceManager {
private static final String PREF_NAME = "app_settings";
/**
* SharedPreferencesを使用して設定を保存します。
* 複数の設定ファイルが必要な場合に適しています。
*/
public boolean saveSetting(Context context, String key, String value) {
SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
return editor.commit();
}
/**
* SharedPreferencesから設定を読み込みます。
*/
public String loadSetting(Context context, String key, String defaultValue) {
SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
return prefs.getString(key, defaultValue);
}
/**
* Activityに紐付いたPreferencesを使用して設定を保存します。
* アプリ全体で1つの設定ファイルのみが必要な場合に適しています。
*/
public boolean saveActivitySetting(Activity activity, String key, String value) {
SharedPreferences prefs = activity.getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
return editor.commit();
}
/**
* Activityに紐付いたPreferencesから設定を読み込みます。
*/
public String loadActivitySetting(Activity activity, String key, String defaultValue) {
SharedPreferences prefs = activity.getPreferences(Context.MODE_PRIVATE);
return prefs.getString(key, defaultValue);
}
}
次に、上記のPreferenceManagerクラスを使用して、実際に設定を保存・読み込みするサンプルコードを示します。
void testSettingsSaving(Activity activity) {
PreferenceManager manager = new PreferenceManager();
// 既存の設定値を取得
String currentValue = manager.loadSetting(this, "server_ip", "127.0.0.1");
Log.d("SettingsTest", "Current IP: " + currentValue);
// 新しい値を保存
manager.saveSetting(this, "server_ip", "192.168.1.100");
currentValue = manager.loadSetting(this, "server_ip", "127.0.0.1");
Log.d("SettingsTest", "Updated IP: " + currentValue);
// Activity固有の設定も試す
String activityValue = manager.loadActivitySetting(activity, "activity_setting", "default");
Log.d("SettingsTest", "Activity setting: " + activityValue);
manager.saveActivitySetting(activity, "activity_setting", "updated_value");
activityValue = manager.loadActivitySetting(activity, "activity_setting", "default");
Log.d("SettingsTest", "Updated activity setting: " + activityValue);
}
ActivityのonCreateメソッド内で上記テストメソッドを呼び出します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testSettingsSaving(this);
}
実行結果として、以下のようにログが出力されます。これは、SharedPreferencesの永続化機能が正しく動作していることを示しています。
D/SettingsTest: Current IP: 127.0.0.1
D/SettingsTest: Updated IP: 192.168.1.100
D/SettingsTest: Activity setting: default
D/SettingsTest: Updated activity setting: updated_value
以上のように、getSharedPreferencesは複数の設定ファイルを管理する場合に適し、getPreferencesはActivity単位での設定保持に最適です。アプリの設計に応じて適切なメソッドを選択することが重要です。