¿Cómo usar SharedPreferences como LocalStore, de manera más genérica?
Ser nuevo en el mundo de Android y avanzar con alegría día a día;) Me gustaría compartir ejemplos sobre el uso común.
Aquí viene un ejemplo sobre cómo usar SharedPreferences con una clase LocalStore genérica.
- No se puede cambiar el texto mediante SharedPreferences
- Cómo almacenar y recuperar (clave, valor) tipo de datos utilizando las preferencias guardadas android
- ¿Cómo puedo almacenar un HashMap <Integer, String> en android usando preferencias compartidas?
- Uso de SharedPreferences con diferentes contextos
- Preferencias compartidas de Android en diferentes aplicaciones
Cree una clase común para ser utilizada por su actividad principal o por cualquiera de las sub-actividades.
public class LocalStore { private static final String TAG = "LocalStore"; private static final String PREF_FILE_NAME = "userprefs"; public static void clear(Context context) { clear(context, "unknown"); } public static void clear(Context context, String caller) { Editor editor = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); editor.clear(); editor.commit(); Log.d(TAG, "caller:"+caller + "|clear LocalStore"); } public static boolean setCustomBooleanData(String key, boolean value, Context context) { Editor editor = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); editor.putBoolean(key, value); return editor.commit(); } public static boolean getCustomBooleanData(String key, Context context) { SharedPreferences savedSession = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); return (savedSession.getBoolean(key, false)); } public static boolean setCustomStringData(String key, String value, Context context) { Editor editor = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); editor.putString(key, value); return editor.commit(); } public static String getCustomStringData(String key, Context context) { SharedPreferences savedSession = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); return (savedSession.getString(key, null)); } public static boolean isCustomStringExistInLocal(String customKey, Context context) { SharedPreferences savedSession = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); return (savedSession.getString(customKey, null))==null?false:true; } public static boolean saveObject(String objKey, Serializable dataObj, Context context) { Editor editor = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); editor.putString(objKey, ObjectSerializer.serialize(dataObj) ); Log.d(TAG, "savedObject| objKey:"+objKey+"/" + dataObj.toString()); return editor.commit(); } public static Object getObject(String objKey, Context context) { SharedPreferences savedSession = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); Object dataObj = ObjectSerializer.deserialize(savedSession.getString(objKey, null)); return dataObj; } }
Nota: puede utilizar ObjectSerializer desde aquí
¡Disfrutar!
Actualización adicional: Implementé una biblioteca para usar MEMDISKCACHE y SHAREDPREF como GENERIC_STORE cualquier persona interesada puede usarlo desde
-> https://github.com/wareninja/generic-store-for-android
- Acceso a SharedPreferences mediante métodos estáticos
- Manejo de varias instancias de appwidget
- ¿Dónde se almacenan las preferencias compartidas?
- Android: obtiene los elementos de la matriz de cadenas y muestra uno por uno en la vista de texto
- PreferenceManager.setDefaultValues readAgain parámetro y nuevas preferencias
- ¿Preferencias compartidas? Javax.crypto.BadPaddingException: bloque de pad corrompido sólo en algunos dispositivos
- Android getDefaultSharedPreferences
- SharedPreferences no funciona en todas las actividades
Suponiendo que desea algunos consejos sobre cómo mejorar aún más, aquí tienes.
- Por lo general, Android sigue una convención para mantener la variable
Context
como el primer parámetro. Es una buena práctica hacer esto al crear cualquier biblioteca general. - Si desea hacerlo más genérico, ¿por qué no intenta sobrecargar el método? Proporcionará al desarrollador más flexibilidad al establecer valores muy parecidos a cómo se manejan los extras en la clase
Intent
.
Por ejemplo:
public static boolean setData(Context, String key, boolean value) { Editor editor = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); editor.putBoolean(key, value); return editor.commit(); } public static boolean setData(Context, String key, String value) { Editor editor = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); editor.putString(key, value); return editor.commit(); }
Así que simplemente puede llamar a las funciones sobrecargadas de esta manera:
setData(this, "myBoolean", true); setData(this, "myString", "Its Awesome");
- Android – evitar copiar / pegar edittext y pulsar dos veces todo
- La aplicación se bloquea al asignar un nuevo adaptador a mi ViewPager