Je souhaite enregistrer et récupérer certains paramètres d'application dans mon projet Xamarin.Android.
Je sais que dans Android (Java), j'utilise la classe SharedPreferences
pour stocker ces informations, mais je ne sais pas comment les convertir en Xamarin C #.
Lorsque je tape "SharedPreferences" dans l'IDE Xamarin Studio, il n'y a pas de saisie semi-automatique, donc je ne sais pas quoi utiliser.
Une recherche initiale des interwebs m'a amené à une question connexe, mais ne contient que Android Java:
Donc, pour résumer:
SharedPreferences
?L'équivalent Xamarin.Android de SharedPreferences
est une interface appelée ISharedPreferences
.
Utilisez-le de la même manière, et vous pourrez facilement porter Android code à travers.
Par exemple, pour enregistrer un vrai/faux bool
à l'aide de Context
, vous pouvez procéder comme suit:
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
Accédez aux valeurs enregistrées en utilisant:
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>);
À partir de cet exemple, vous pouvez voir qu'une fois que vous connaissez la bonne interface C # à utiliser, le reste est facile. Il existe de nombreux Android Java exemples sur la façon d'utiliser SharedPreferences
pour des situations plus complexes, et ceux-ci peuvent être portés très facilement à l'aide de ISharedPreferences
.
Pour plus d'informations, lisez ce fil:
Vous pouvez utiliser cet exemple pour vous SharedPreferences dans Xamarin.Android
Tout d'abord, vous devez utiliser:
ISharedPreferences //Interface for accessing and modifying preference data
ISharedPreferencesEditor // Interface used for modifying values in a ISharedPreferences
Vous pouvez créer une classe similaire
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, "");
}
}
De l'activité.
Context mContext = Android.App.Application.Context;
AppPreferences ap = new AppPreferences (mContext);
Si vous souhaitez économiser de la valeur:
string key = "123123";
ap.saveAccessKey (key);
Si vous voulez obtenir la valeur
string key = ap.getAccessKey();
J'espère que cet exemple vous aide
J'ai eu du mal à utiliser PreferenceManager comme le montre l'exemple. J'ai ajouté ce code en haut et maintenant je l'utilise bien.
using Android.Preferences;
De plus, pour obtenir les préférences, vous devez ajouter la valeur par défaut en tant que deuxième paramètre ou il ne sera pas compilé
mInt = prefs.GetInt ("key_for_my_int_value", defaultInt);
Je ne sais pas si vous ne savez toujours pas ou pas, mais assurez-vous Dispose vos variables si elles sont à l'intérieur d'une fonction:
prefs.Dispose();
prefEditor.Dispose();
J'ai eu un crash/gel sur mon application pendant un certain temps en raison de ne pas disposer de la mémoire chaque fois qu'elle n'est plus nécessaire.