web-dev-qa-db-ja.com

Xamarin.AndroidでSharedPreferencesを使用するにはどうすればよいですか?

Xamarin.Androidプロジェクトでいくつかのアプリケーション設定を保存および取得したい。

Android(Java)では、クラスSharedPreferencesを使用してこの情報を保存することを知っていますが、それをXamarin C#に変換する方法がわかりません。

Xamarin Studio IDEに「SharedPreferences」と入力すると、オートコンプリートがないため、何を使用すればよいかわかりません。


インターウェブの最初の検索で関連する質問に移動しましたが、Android Javaのみが含まれています。


要約すると:

  • Xamarin Android C#と同等のAndroid JavaのSharedPreferencesと同等の
38

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

詳細については、次のスレッドを参照してください。

66

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();

この例がお役に立てば幸いです

24

例が示すように、PreferenceManagerの使用に問題がありました。このコードを一番上に追加しましたが、今ではそれを使っても問題ありません。

using Android.Preferences;

さらに、設定を取得するには、デフォルト値を2番目のパラメーターとして追加する必要があります。そうしないと、コンパイルされません。

mInt = prefs.GetInt ("key_for_my_int_value", defaultInt);
7
Yohan Dahmani

それでもわからないかどうかはわかりませんが、関数内にある場合はDispose変数を確認してください:

prefs.Dispose();
prefEditor.Dispose();

メモリが不要になったときにメモリを破棄しないため、しばらくの間、アプリでクラッシュ/フリーズが発生しました。

2
Nevaran