¿Cómo uso SharedPreferences en Xamarin.Android?
(4)
Quiero guardar y recuperar algunas configuraciones de aplicaciones en mi proyecto Xamarin.Android.
Sé que en Android (java), uso la clase SharedPreferences
para almacenar esta información, pero no sé cómo convertir eso a Xamarin C #.
Cuando escribo "SharedPreferences" en el IDE de Xamarin Studio, no hay autocompletado, así que no sé qué usar.
Una búsqueda inicial de interwebs me llevó a una pregunta relacionada, pero solo contiene Android java:
Entonces para resumir:
- ¿Cuál es el equivalente de Xamarin Android C # de las
SharedPreferences
de Android Java?
El equivalente Xamarin.Android de SharedPreferences
es una interfaz llamada ISharedPreferences
.
Úselo de la misma manera, y podrá transferir fácilmente el código de Android.
Por ejemplo, para guardar un bool
verdadero / falso usando algún Context
, puede hacer lo siguiente:
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
Acceda a los valores guardados usando:
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>);
De esta muestra, puede ver que una vez que conoce la interfaz correcta de C # para usar, el resto es fácil. Hay muchos ejemplos de Android de Java sobre cómo usar las SharedPreferences
para situaciones más complejas, y estos pueden ser portados muy fácilmente usando ISharedPreferences
.
Para obtener más información, lea este hilo:
No estoy seguro si aún no lo sabe o no, pero asegúrese de descartar las variables si están dentro de una función:
prefs.Dispose();
prefEditor.Dispose();
Tuve un bloqueo / congelamiento en mi aplicación durante un tiempo debido a que no eliminó la memoria cuando ya no la necesitaba.
Puede usar este ejemplo para sus SharedPreferences en Xamarin.Android
Primero, necesitas usar:
ISharedPreferences //Interface for accessing and modifying preference data
ISharedPreferencesEditor // Interface used for modifying values in a ISharedPreferences
Puedes crear una clase similar
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 la actividad.
Context mContext = Android.App.Application.Context;
AppPreferences ap = new AppPreferences (mContext);
Si quieres guardar algún valor:
string key = "123123";
ap.saveAccessKey (key);
Si quieres obtener el valor
string key = ap.getAccessKey();
Espero que este ejemplo te ayude
Tuve problemas para usar PreferenceManager como muestra el ejemplo. Añadí este código en la parte superior y ahora estoy bien usándolo.
using Android.Preferences;
Además de obtener las preferencias, debe agregar el valor predeterminado como un segundo parámetro o no compilará
mInt = prefs.GetInt ("key_for_my_int_value", defaultInt);