【问题标题】:Android:how to store and retrieve Hashmap data in sharedpreferences?Android:如何在 sharedpreferences 中存储和检索 Hashmap 数据?
【发布时间】:2013-08-10 00:50:49
【问题描述】:

我想在内部存储中存储一些数据,例如键和值对。 所以我使用 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();

并从 Sharedpreferences 中检索数据:

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

我还将在适配器中存储 hashmap 并设置到 listview 中。 我的主要目的是将数据存储和检索到共享首选项中,并将数据显示到列表视图中。

提前致谢。

【问题讨论】:

  • 您是否在日志中打印了数据?您是否收到了?
  • 有什么问题?检索值时是否为 null?
  • SharedPreferences 不应该这样使用。但是,您可以这样使用它,并且代码看起来好像可以工作。但是如果你有一组未定义的键,你应该考虑使用数据库或其他东西。
  • 我必须将该数据存储到内部存储中。所以我正在使用 sharedpreferences。是的,我必须检索值。但我不知道如何将该哈希图存储在列表视图中。
  • 将 hasmap 列表作为参数传递给您的自定义 adpater..并将其设置为您的列表视图。

标签: java android hashmap sharedpreferences


【解决方案1】:

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

在另一边,将字符串转换为 HashMap 并享受。

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

【讨论】:

    【解决方案2】:

    你可以使用json来解决。

    例如:

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

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

    【讨论】:

      【解决方案3】:

      进行您所描述的操作有特殊之处,这是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]));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多