Android:如何在SharedPreferences中存储和检索Hashmap数据?

3
我希望在内部存储中存储一些类似键和值对的数据。因此,我使用HashMap来存储键值对。但是我没有得到足够的解决方案来将这个HashMap存储并检索到sharedpreferences中。请给我一些解决方案。
以下是我的代码:
HashMap<String, String> MapListMesasges = new HashMap<String, String>();
MapListMesasges.put(FromName, message.getBody());
preferences = mActivity.getSharedPreferences(
                                SharePreference_messages_history_name,
                                Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = preferences.edit();
                        for (Entry<String, String> entry : MapListMesasges
                                .entrySet()) {
                            editor.putString(entry.getKey(), entry.getValue());
                        }
                        editor.commit();

从Sharedprefernces中检索和获取数据:

preferences = mActivity.getSharedPreferences(
                SharePreference_messages_history_name, Context.MODE_PRIVATE);
        for (Entry<String, ?> entry : preferences.getAll().entrySet()) {
            MapListMesasges.put(entry.getKey(), entry.getValue().toString());
        }

我会在适配器中存储哈希映射,并将其设置为列表视图。我的主要目的是将数据存储和检索到共享首选项中,同时将数据显示在列表视图中。
提前致谢。

你有在日志中打印数据吗?你能获取到数据吗? - Shani Goriwal
2
SharedPreferences 不应该被这样使用。然而,你可以像那样使用它,代码看起来好像能够工作。但是如果你有一个未定义的键集,你应该考虑使用数据库或其他东西。 - zapl
将具有哈希映射列表的参数传递给您的自定义适配器,并将其设置为您的ListView。 - Shani Goriwal
将HashMap保存到SharedPreferences - Longwayto
将Map序列化为Json,像简单字符串一样保存。 这是一个不好的想法,但我认为它会起作用。 - Javaluca
显示剩余7条评论
3个回答

0
您可以使用 JSON 解决方案。
例如:
**JSON**

    {
     [
      "name1","message1",
      "name2","message2"
     ]
    }

将整个JSON字符串与某个键一起存储,并使用相同的键进行检索。 只需解析/创建JSON即可。您可以使用GSON库进行JSON创建/解析


0

有一个特殊的东西可以执行您描述的操作,它是 SQLite。 但如果您真的想将它们存储在SharedPreferences中,可以做到。 您的解决方案几乎可以工作。 您只需要存储键。

StringBuilder b = new StringBuilder();
for (Entry<String, String> entry : MapListMesasges.entrySet()) {
      editor.putString(entry.getKey(), entry.getValue());
      if(b.length() != 0){
           b.append(",");
      }
      b.append(entry.getKey());
 }
editor.putString("KEY_FOR_PREF_KEYS",b.toString());

要检索数据,请使用这个

String[] keys = preferences.getString("KEY_FOR_PREF_KEYS","").split(",");
for (int i = 0; i < keys.length; i++) {
    MapListMesasges.put(keys[i], preferences.getString(keys[i]));
}

0

将HashMap存储在Preferences中最简单的方法就是将其转换为字符串并进行存储。

在另一端,获取该字符串再将其转换为HashMap即可享受使用。

要将字符串转换为HashMap或反之,请查看this链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接