Как сэкономить HashMap до Общие настройки в Android?Как сохранить HashMap для общих настроек?
ответ
Я бы не рекомендовал записывать сложные объекты в SharedPreference. Вместо этого я бы использовал ObjectOutputStream
, чтобы записать его во внутреннюю память.
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();
, но мне нужно, чтобы сохранить хеш-карту, как он сам, как мы добавив вектор в общих настройках – jibysthomas
чем вы должны, вероятно, использовать сериализацию и сохранить сериализованный HashMap в SharedPrefs. Вы можете легко найти примеры кода, как это сделать. – hovanessyan
Я использую Gson
конвертировать HashMap
в String
, а затем сохранить его в 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();
}
Но как мы можем это сделать? Любой образец кода? –
Как получить hashmap из gson i получил ошибку msg like com.qb.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_OBJECT, но BEGIN_ARRAY в строке 1 столбец 2 - – Ram
@Ram Я добавил код. Возможно, это поможет – penduDev
Я написал простой кусок кода, чтобы сохранить карту в предпочтении и загрузить карту от предпочтений. Никаких функций GSON или Jackson не требуется. Я просто использовал карту с String как ключом и Boolean как значение.
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;
}
Вместо этого вы можете попробовать использовать JSON.
Для сохранения
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
}
Для получения
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();
}
Как отделившийся ответ Vinoj Джона HOSAN, я модифицировал ответ, чтобы позволить для более общих вставок, на основе ключа данных , вместо одного ключа, такого как "My_map"
.
В моей реализации, MyApp
мой Application
переопределить класс, и MyApp.getInstance()
акты, возвращающие 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;
}
Вы можете использовать это в выделенный на общих префов файл (источник: https://developer.android.com/reference/android/content/SharedPreferences.html):
GETALL
добавлены в уровне API 1 Карта GETALL() Получить все значения из в предпочтения.
Обратите внимание, что вы не должны изменять коллекцию, возвращенную этим методом, или изменять любое его содержимое. Согласованность сохраненных вами данных не гарантируется, если вы это сделаете.
Возвращает карту Возвращает карту, содержащую список пар ключ/значение, представляющее предпочтения.
- 1. Как сохранить объект json для общих настроек?
- 2. Как сохранить счетчик для сохраненных/общих настроек
- 3. как сохранить HashMap объектов для общих предпочтений
- 4. Как сохранить hashmap для общих предпочтений?
- 5. Как сохранить статус переключателя для сохраненных/общих настроек?
- 6. Как сохранить объект DataSnapshot Firebase для общих настроек?
- 7. Сохранение общих настроек из настроек
- 8. Как сохранить и получить HashMap <String, Boolean> с использованием общих настроек
- 9. поиск общих настроек android
- 10. Как сохранить и получить дату с использованием общих настроек?
- 11. Чтение общих настроек
- 12. Удаление общих настроек
- 13. Использование общих настроек для сохранения высоких показателей
- 14. Как сохранить изображения в ImageView с использованием общих настроек
- 15. Как сохранить и восстановить логические флаги из общих настроек
- 16. Как я могу сохранить значение флажка с помощью общих настроек?
- 17. Как сохранить состояние togglebutton с использованием общих настроек
- 18. Как сохранить несколько изображений в ImageView с использованием общих настроек
- 19. Как сохранить время и баллы с использованием общих настроек
- 20. как сохранить флажок значения пользовательского списка с использованием общих настроек
- 21. Назначьте вычисленную переменную для общих настроек
- 22. Гибкость общих настроек android
- 23. Удаление общих настроек Данные
- 24. реализация общих настроек android
- 25. Программа сбоев общих настроек
- 26. Реализация общих настроек
- 27. Фрагменты против общих настроек
- 28. Извлечение хэш-карты из общих настроек
- 29. использование общих настроек, чтобы сохранить строку на кнопку мыши
- 30. сохранить данные от arraylist до общих настроек не работает
попробовать это http://stackoverflow.com/a/39435730/6561141 – tpk