web-dev-qa-db-fra.com

Comment utiliser SharedPreferences dans Xamarin.Android?

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:

  • Quel est le Xamarin Android C # équivalent de Android Java's SharedPreferences?
38

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:

66

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

24
Miguel Rodríguez

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

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.

2
Nevaran