如何在Android上存储HashMap?

时间:2012-02-10 11:23:03

标签: android hashmap storage

所以,我正试图在Android上存储HashMap。我认为最好使用internal storage,但我不明白如何在中保存 HashMap,然后再阅读。有人可以解释一下如何正确地做到这一点吗?

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

HashMap<String, Integer> counters;

3 个答案:

答案 0 :(得分:12)

SharedPreferences还将键值对中的数据存储为hashmap,因此为什么不从hashmap获取所有键值并将其存储到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
    }

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

答案 1 :(得分:4)

试试这个

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

答案 2 :(得分:0)

有一个很好的例子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