Xamarin.Androidプロジェクトでいくつかのアプリケーション設定を保存および取得したい。
Android(Java)では、クラスSharedPreferences
を使用してこの情報を保存することを知っていますが、それをXamarin C#に変換する方法がわかりません。
Xamarin Studio IDEに「SharedPreferences」と入力すると、オートコンプリートがないため、何を使用すればよいかわかりません。
インターウェブの最初の検索で関連する質問に移動しましたが、Android Javaのみが含まれています。
要約すると:
SharedPreferences
と同等のSharedPreferences
に相当するXamarin.Androidは、ISharedPreferences
と呼ばれるインターフェイスです。
同じように使用すると、簡単にAndroidコードを渡って移植できます。
たとえば、いくつかのbool
を使用してtrue/false Context
を保存するには、次のようにします。
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext);
ISharedPreferencesEditor editor = prefs.Edit ();
editor.PutBoolean ("key_for_my_bool_value", mBool);
// editor.Commit(); // applies changes synchronously on older APIs
editor.Apply(); // applies changes asynchronously on newer APIs
保存された値にアクセスするには:
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext);
mBool = prefs.GetBoolean ("key_for_my_bool_value", <default value>);
mInt = prefs.GetInt ("key_for_my_int_value", <default value>);
mString = prefs.GetString ("key_for_my_string_value", <default value>);
このサンプルから、使用する正しいC#インターフェイスがわかれば、残りは簡単であることがわかります。多くのAndroid Javaより複雑な状況でSharedPreferences
を使用する方法の例があり、これらはISharedPreferences
。
詳細については、次のスレッドを参照してください。
Xamarin.AndroidのSharedPreferencesにこの例を使用できます
最初に、使用する必要があります:
ISharedPreferences //Interface for accessing and modifying preference data
ISharedPreferencesEditor // Interface used for modifying values in a ISharedPreferences
同様のクラスを作成できます
public class AppPreferences
{
private ISharedPreferences mSharedPrefs;
private ISharedPreferencesEditor mPrefsEditor;
private Context mContext;
private static String PREFERENCE_ACCESS_KEY = "PREFERENCE_ACCESS_KEY";
public AppPreferences (Context context)
{
this.mContext = context;
mSharedPrefs = PreferenceManager.GetDefaultSharedPreferences(mContext);
mPrefsEditor = mSharedPrefs.Edit ();
}
public void saveAccessKey(string key){
mPrefsEditor.PutString(PREFERENCE_ACCESS_KEY, key);
mPrefsEditor.Commit();
}
public string getAccessKey(){
return mSharedPrefs.GetString(PREFERENCE_ACCESS_KEY, "");
}
}
アクティビティから。
Context mContext = Android.App.Application.Context;
AppPreferences ap = new AppPreferences (mContext);
値を保存する場合:
string key = "123123";
ap.saveAccessKey (key);
値を取得したい場合
string key = ap.getAccessKey();
この例がお役に立てば幸いです
例が示すように、PreferenceManagerの使用に問題がありました。このコードを一番上に追加しましたが、今ではそれを使っても問題ありません。
using Android.Preferences;
さらに、設定を取得するには、デフォルト値を2番目のパラメーターとして追加する必要があります。そうしないと、コンパイルされません。
mInt = prefs.GetInt ("key_for_my_int_value", defaultInt);
それでもわからないかどうかはわかりませんが、関数内にある場合はDispose変数を確認してください:
prefs.Dispose();
prefEditor.Dispose();
メモリが不要になったときにメモリを破棄しないため、しばらくの間、アプリでクラッシュ/フリーズが発生しました。