¿Cómo puedo guardar un HashMap en Preferencias compartidas en Android?¿Cómo guardar HashMap en Preferencias compartidas?
Respuesta
No recomendaría escribir objetos complejos en SharedPreference. En cambio, usaría ObjectOutputStream
para escribirlo en la memoria interna.
File file = new File(getDir("data", MODE_PRIVATE), "map");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(map);
outputStream.flush();
outputStream.close();
Map<String, String> aMap = new HashMap<String, String>();
aMap.put("key1", "val1");
aMap.put("key2", "val2");
aMap.put("Key3", "val3");
SharedPreferences keyValues = getContext().getSharedPreferences("Your_Shared_Prefs"), Context.MODE_PRIVATE);
SharedPreferences.Editor keyValuesEditor = keyValues.edit();
for (String s : aMap.keySet()) {
keyValuesEditor.putString(s, aMap.get(s));
}
keyValuesEditor.commit();
pero necesito guardar el mapa hash como la misma como si la adición de vector en las preferencias compartidas – jibysthomas
que usted tiene que utilizar probablemente serialización y guardar el HashMap serializado en SharedPrefs. Puede encontrar fácilmente ejemplos de código sobre cómo hacer eso. – hovanessyan
utilizo para convertir Gson
HashMap
a String
y luego guardarlo en SharedPrefs
private void hashmaptest()
{
//create test hashmap
HashMap<String, String> testHashMap = new HashMap<String, String>();
testHashMap.put("key1", "value1");
testHashMap.put("key2", "value2");
//convert to string using gson
Gson gson = new Gson();
String hashMapString = gson.toJson(testHashMap);
//save in shared prefs
SharedPreferences prefs = getSharedPreferences("test", MODE_PRIVATE);
prefs.edit().putString("hashString", hashMapString).apply();
//get from shared prefs
String storedHashMapString = prefs.getString("hashString", "oopsDintWork");
java.lang.reflect.Type type = new TypeToken<HashMap<String, String>>(){}.getType();
HashMap<String, String> testHashMap2 = gson.fromJson(storedHashMapString, type);
//use values
String toastString = testHashMap2.get("key1") + " | " + testHashMap2.get("key2");
Toast.makeText(this, toastString, Toast.LENGTH_LONG).show();
}
Pero, ¿cómo podemos hacer eso? ¿Alguna muestra de código? –
cómo obtener hashmap de gson recibí el mensaje de error como com.qb.gson.JsonSyntaxException: java.lang.IllegalStateException: BEGIN_OBJECT esperado, pero era BEGIN_ARRAY en la línea 1 columna 2 - – Ram
@Ram He agregado el código. Tal vez ayude – penduDev
He escrito un simple trozo de código para guardar un mapa de preferencia y cargar el mapa de preferencia. No se requieren funciones GSON o Jackson. Acabo de usar un mapa que tiene String como clave y Boolean como valor.
private void saveMap(Map<String,Boolean> inputMap){
SharedPreferences pSharedPref = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
if (pSharedPref != null){
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
Editor editor = pSharedPref.edit();
editor.remove("My_map").commit();
editor.putString("My_map", jsonString);
editor.commit();
}
}
private Map<String,Boolean> loadMap(){
Map<String,Boolean> outputMap = new HashMap<String,Boolean>();
SharedPreferences pSharedPref = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
try{
if (pSharedPref != null){
String jsonString = pSharedPref.getString("My_map", (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator<String> keysItr = jsonObject.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Boolean value = (Boolean) jsonObject.get(key);
outputMap.put(key, value);
}
}
}catch(Exception e){
e.printStackTrace();
}
return outputMap;
}
Podría intentar usar JSON en su lugar.
Para ahorrar
try {
HashMap<Integer, String> hash = new HashMap<>();
JSONArray arr = new JSONArray();
for(Integer index : hash.keySet()) {
JSONObject json = new JSONObject();
json.put("id", index);
json.put("name", hash.get(index));
arr.put(json);
}
getSharedPreferences(INSERT_YOUR_PREF).edit().putString("savedData", arr.toString()).apply();
} catch (JSONException exception) {
// Do something with exception
}
Para conseguir
try {
String data = getSharedPreferences(INSERT_YOUR_PREF).getString("savedData");
HashMap<Integer, String> hash = new HashMap<>();
JSONArray arr = new JSONArray(data);
for(int i = 0; i < arr.length(); i++) {
JSONObject json = arr.getJSONObject(i);
hash.put(json.getInt("id"), json.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
}
Como un spin off de la respuesta de Vinoj John Hosan, modifiqué la respuesta para permitir inserciones más genéricos, basada en la clave de los datos , en lugar de una sola clave como "My_map"
.
En mi aplicación, MyApp
es mi clase Application
anulación, y MyApp.getInstance()
actúa para devolver el context
.
public static final String USERDATA = "MyVariables";
private static void saveMap(String key, Map<String,String> inputMap){
SharedPreferences pSharedPref = MyApp.getInstance().getSharedPreferences(USERDATA, Context.MODE_PRIVATE);
if (pSharedPref != null){
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
SharedPreferences.Editor editor = pSharedPref.edit();
editor.remove(key).commit();
editor.putString(key, jsonString);
editor.commit();
}
}
private static Map<String,String> loadMap(String key){
Map<String,String> outputMap = new HashMap<String,String>();
SharedPreferences pSharedPref = MyApp.getInstance().getSharedPreferences(USERDATA, Context.MODE_PRIVATE);
try{
if (pSharedPref != null){
String jsonString = pSharedPref.getString(key, (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator<String> keysItr = jsonObject.keys();
while(keysItr.hasNext()) {
String k = keysItr.next();
String v = (String) jsonObject.get(k);
outputMap.put(k,v);
}
}
}catch(Exception e){
e.printStackTrace();
}
return outputMap;
}
Se puede usar esta en un dedicado en Preferencias compartidos presentar (fuente: https://developer.android.com/reference/android/content/SharedPreferences.html):
getAll
añadido en el nivel API 1 Mapa getAll() Recuperar todos los valores de la preferencias.
Tenga en cuenta que no debe modificar la colección devuelta por este método, ni alterar ninguno de sus contenidos. La consistencia de sus datos almacenados es no garantizada si lo hace.
Mapa de devoluciones Devuelve un mapa que contiene una lista de pares clave/valor que representa las preferencias.
- 1. Problema al guardar las preferencias compartidas en Android
- 2. Cómo usar las Preferencias Compartidas
- 3. Preferencias compartidas de Android
- 4. Guardar una lista de arrays de Cadenas para preferencias compartidas
- 5. preferencias compartidas editor de
- 6. Eliminar archivo de preferencias compartidas
- 7. Guardar preferencias
- 8. Preferencias compartidas de Android en diferentes aplicaciones
- 9. Android: Recuperando preferencias compartidas de otra aplicación
- 10. Android Preferencias compartidas con actividades múltiples
- 11. ¿Las preferencias compartidas pueden ser privadas?
- 12. ¿Cómo acceder a las preferencias compartidas entre actividades en Android?
- 13. Android Almacenamiento interno VS Preferencias compartidas
- 14. ¿Dónde se almacenan las preferencias compartidas?
- 15. Inicialización de preferencias compartidas de Android
- 16. Preferencias compartidas de Android que no guardan
- 17. Preferencias compartidas solo guardadas la primera vez
- 18. Android: ¿Establecer preferencias compartidas durante la instalación?
- 19. Preferencias compartidas vs base de datos
- 20. androide: comprobar si existe valor en Preferencias del compartidas
- 21. ¿Ver las preferencias compartidas de una aplicación de Android?
- 22. Preferencias compartidas - longitud máxima de un solo valor
- 23. de acceso Preferencias compartidas por diferentes Actividad (Android)
- 24. Android: ¿Es posible tener múltiples preferencias compartidas distintas por aplicación?
- 25. ¿Cómo obtengo las Preferencias Compartidas desde una Actividad Preferencial en Android?
- 26. ¿Cómo se puede escribir el código para hacer preferencias compartidas para una matriz en Android?
- 27. No se pueden guardar las preferencias del proyecto en Eclipse
- 28. cómo restablecer todos los almacenes de datos almacenados usando preferencias compartidas
- 29. ¿Cómo iterar a través de todas las claves de las preferencias compartidas?
- 30. ¿Se eliminan las preferencias compartidas en las aplicaciones de Android cuando un usuario actualiza la aplicación?
probar esto http://stackoverflow.com/a/39435730/6561141 – tpk