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:
SharedPreferences
?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:
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
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);
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.