getpreferences from data code and android sharedpreferences

android - from - ¿Cómo guardar HashMap en Preferencias Compartidas?



sharedpreferences android kotlin (7)

¿Cómo puedo guardar un HashMap en Preferencias compartidas en Android?


Como resultado de la respuesta de Vinoj John Hosan, modifiqué la respuesta para permitir inserciones más genéricas, basadas en la clave de los datos, en lugar de una sola clave como "My_map" .

En mi implementación, MyApp es mi clase de anulación de Application , 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; }


Escribí un código simple para guardar el mapa con 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 guardar

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 obtener

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(); }


Puede utilizar esto en un archivo de preferencias dedicado en prefs (fuente: https://developer.android.com/reference/android/content/SharedPreferences.html ):

obtener toda

agregado en API nivel 1 Map getAll () Recupera todos los valores de las 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 no está garantizada si lo hace.

Mapa de devoluciones Devuelve un mapa que contiene una lista de pares clave / valor que representa las preferencias.


Yo uso Gson para convertir 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(); }


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();