webentwicklung-frage-antwort-db.com.de

Wie verwende ich SharedPreferences in Xamarin.Android?

Ich möchte einige Anwendungseinstellungen in meinem Xamarin.Android-Projekt speichern und abrufen.

Ich weiß, dass ich in Android (Java)) die Klasse SharedPreferences verwende, um diese Informationen zu speichern, aber ich weiß nicht, wie ich das in Xamarin C # konvertieren kann.

Wenn ich "SharedPreferences" in die Xamarin Studio-IDE eingebe, erfolgt keine automatische Vervollständigung, sodass ich nicht weiß, was ich verwenden soll.


Eine erste Suche in den Interwebs führte mich zu einer verwandten Frage, die jedoch nur Android Java enthält:


Um es zusammenzufassen:

  • Was ist das Xamarin Android C # -Äquivalent von Android Java's SharedPreferences?
38

Das Xamarin.Android-Äquivalent von SharedPreferences ist eine Schnittstelle mit dem Namen ISharedPreferences.

Verwenden Sie es auf die gleiche Weise, und Sie können problemlos Android code across portieren.


Um beispielsweise ein wahres/falsches bool mit einem Context zu speichern, können Sie Folgendes tun:

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

Auf gespeicherte Werte zugreifen mit:

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

Anhand dieses Beispiels können Sie erkennen, dass der Rest einfach ist, wenn Sie die richtige C # -Schnittstelle kennen. Es gibt viele Android Java Beispiele zur Verwendung von SharedPreferences für komplexere Situationen, und diese können sehr einfach mit ISharedPreferences.

Für weitere Informationen lesen Sie diesen Thread:

66

Sie können dieses Beispiel für Ihre SharedPreferences in Xamarin.Android verwenden

Zunächst müssen Sie Folgendes verwenden:

ISharedPreferences //Interface for accessing and modifying preference data
ISharedPreferencesEditor // Interface used for modifying values in a ISharedPreferences

Sie können eine ähnliche Klasse erstellen

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, "");
    }
}

Aus der Aktivität.

Context mContext = Android.App.Application.Context;
AppPreferences ap = new AppPreferences (mContext);

Wenn Sie etwas Wert sparen möchten:

string key = "123123";
ap.saveAccessKey (key);

Wenn Sie den Wert erhalten möchten

string key = ap.getAccessKey();

Ich hoffe, dieses Beispiel hilft Ihnen weiter

24

Ich hatte Probleme mit PreferenceManager, wie das Beispiel zeigt. Ich habe diesen Code oben hinzugefügt und benutze ihn jetzt gut.

using Android.Preferences;

Um die Einstellungen zu erhalten, müssen Sie den Standardwert als zweiten Parameter hinzufügen, da er sonst nicht kompiliert wird

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

Nicht sicher, ob Sie es noch wissen oder nicht, aber stellen Sie sicher, dass Sie Dispose Ihre Variablen, wenn sie in einer Funktion sind:

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

Ich hatte über einen längeren Zeitraum einen Absturz/ein Einfrieren meiner App, weil der Speicher nicht mehr verfügbar war, wenn er nicht mehr benötigt wird.

2
Nevaran