Хобрук: Ваш путь к мастерству в программировании

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

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

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

HashMap<String, Integer> counters;
10.02.2012

  • где вы хотите сохранить в каком-то файле как постоянство? или пока ваше приложение не будет запущено. 10.02.2012
  • пожалуйста, объясните ваши точные требования к хранению. 10.02.2012
  • больше описания пожалуйста. 10.02.2012
  • Конечно, добавил больше информации. 10.02.2012
  • вы можете сериализовать в json и сохранить его в sharedpref как строку 10.02.2012

Ответы:


1

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

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
    }

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

10.02.2012
  • Можете ли вы показать пример получения значений с помощью этого метода, пожалуйста? 10.02.2012

  • 2

    Попробуй это

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

    и другой способ: ЗДЕСЬ

    10.02.2012

    3

    Хороший пример здесь< /а>.

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

    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-объект.

    13.05.2019
    Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..