¿Cómo uso SharedPreferences en Xamarin.Android?

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:

  • Usar preferencias compartidas en xamarin

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", ); mInt = prefs.GetInt ("key_for_my_int_value", ); mString = prefs.GetString ("key_for_my_string_value", ); 

De esta muestra, puede ver que una vez que conoce la interfaz correcta de C # para usar, el rest 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:

  • Preferencia compartida de Android en el foro Xamarin

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 comstackrá

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

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 locking / congelamiento en mi aplicación durante un tiempo debido a que no eliminó la memoria cuando ya no la necesitaba.