Как хранить HashMap на Android? - PullRequest
       4

Как хранить HashMap на Android?

5 голосов
/ 10 февраля 2012

Итак, я пытаюсь сохранить HashMap на Android.Я думаю, что лучше использовать внутреннее хранилище , но я не понимаю , как сохранить HashMap в нем и затем прочитать его позже .Может кто-нибудь объяснить, как это сделать правильно, пожалуйста?

Есть счетчики со своими именами и значениями.Я хочу загрузить их один раз, когда начнется какое-то действие, поработать с ними (изменить, удалить, добавить новый), а затем сохранить эти данные для использования в следующий раз.Прямо сейчас я использую HashMap, потому что это легко удалить / добавить значения.

HashMap<String, Integer> counters;

Ответы [ 3 ]

12 голосов
/ 10 февраля 2012

SharedPreferences также хранит данные в паре ключ-значение в виде hashmap, так почему бы не получить все значения ключей из hashmap и сохранить их на карте, например:

SharedPreferences pref= getContext().getSharedPreferences("Your_Shared_Prefs"), 
                                                           Context.MODE_PRIVATE);
SharedPreferences.Editor editor= pref.edit();

    for (String s : map.keySet()) {
        editor.putString(s, map.get(s));
    }

Для извлечения значений вы можете использовать:

public abstract Map<String, ?> getAll ()

http://developer.android.com/reference/android/content/SharedPreferences.html#getAll%28%29

использование:

SharedPreferences pref= getContext().getSharedPreferences("Your_Shared_Prefs"), 
                                                           Context.MODE_PRIVATE);
HashMap<String, String> map= HashMap<String, String> pref.getAll();
for (String s : map.keySet()) {
        String value=map.get(s);
        //Use Value
    }

Код не скомпилирован, поэтому возможны незначительные ошибки, но он должен работать.

4 голосов
/ 10 февраля 2012

Попробуйте это

HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("key", "value");
Intent intent = new Intent(this, MyOtherActivity.class);
intent.putExtra("map", hashMap);
startActivity(intent);

, а другой способ ЗДЕСЬ

0 голосов
/ 13 мая 2019

Вот хороший пример здесь .

Итак, если ваша карта выглядит так:

HashMap<String, byte[]> = new HashMap<>();

Функции выглядят так:

public void saveHashMap(String key , Object obj) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(obj);
    editor.putString(key,json);
    editor.apply();     // This line is IMPORTANT !!!
}

public HashMap<String,byte[]> getHashMap(String key) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    Gson gson = new Gson();
    String json = prefs.getString(key,"");
    java.lang.reflect.Type type = new TypeToken<HashMap<String,byte[]>>(){}.getType();
    HashMap<String,byte[]> obj = gson.fromJson(json, type);
    return obj;
}

Общий код выглядит следующим образом:

public void saveHashMap(String key , Object obj) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(obj);
    editor.putString(key,json);
    editor.apply();     // This line is IMPORTANT !!!
}


public HashMap<Integer,YourObject> getHashMap(String key) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    Gson gson = new Gson();
    String json = prefs.getString(key,"");
    java.lang.reflect.Type type = new TypeToken<HashMap<Integer,YourObject>>(){}.getType();
    HashMap<Integer,YourObject> obj = gson.fromJson(json, type);
    return obj;
}

Замените YourObject на ваш Java-объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...