【问题标题】:How to store HashMap on Android?如何在 Android 上存储 HashMap?
【发布时间】:2012-03-02 21:03:09
【问题描述】:

所以,我正在尝试在 Android 上存储 HashMap。我觉得还是用internal storage比较好,但是我不明白怎么保存HashMap里面以后再看。有人可以解释一下如何正确地做到这一点吗?

有自己的名称和值的计数器。我想在某些活动开始时加载它们,使用它们(更改、删除、添加新的),然后保存该数据以供下次使用。现在我使用 HashMap,因为它很容易删除/添加值。

HashMap<String, Integer> counters;

【问题讨论】:

  • 您想在某个文件中作为持久性存储在哪里?或直到您的应用程序正在运行。
  • 请说明您对存储的确切要求。
  • 请提供更多描述。
  • 当然,添加了更多信息。
  • 你可以在json中序列化并作为字符串保存在sharedpref中

标签: android hashmap storage


【解决方案1】:

SharedPreferences 还将数据作为 hashmap 存储在 key-value 对中,所以为什么不从 hashmap 中获取所有 key-value 并存储到 map 中,因为它:

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
    }

代码未编译,因此可能有一些小错误,但应该可以工作。

【讨论】:

  • 您能举一个使用该方法获取值的示例吗?
【解决方案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);

另一种方法是HERE

【讨论】:

    【解决方案3】:

    有一个很好的例子here

    如果你的地图是这样的:

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

    用您的 Java 对象替换 YourObject

    【讨论】:

      猜你喜欢
      • 2012-02-14
      • 2017-12-04
      • 2013-08-10
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 2012-06-18
      • 2012-11-28
      • 2023-04-10
      相关资源
      最近更新 更多