【问题标题】:How to save hashmap to shared preference?如何将哈希图保存到共享首选项?
【发布时间】:2014-12-31 06:34:15
【问题描述】:

我想将 hashmap 保存到 共享偏好。 hashmap 的键将是 ipaddresses,值将是标志(如 true 或 false)。要向用户显示 ipaddreese,我必须获取 hashmap 的所有键。每当我想显示标志值时,我都必须使用 ipaddress 键来获取它。我不想为此使用单独的共享首选项或文件。我该怎么做?

【问题讨论】:

  • I do not want to use a separate shared preferences or file for this. 为什么?你也有 prefs 的条目吗?
  • 是的..我正在将另一个值保存到共享首选项中。这就是我想将 ipaddresses 保存为 hashmap 的原因。

标签: android hashmap sharedpreferences


【解决方案1】:

尝试将对象保存在 SharedPreferences 中。

您需要将 Gson 库添加到您的项目中。

public void putMyObject(String key , Object obj) {

        //AnyVehicleModel mvehicle  =new AnyVehicleModel();
        SharedPreferences.Editor editor = preferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(obj);
        editor.putString(key,json);
        editor.apply();
    }




    public MyObject getMyObject(String key) {

        Gson gson = new Gson();
        String json = preferences.getString(key,"");
        MyObject obj = gson.fromJson(json, MyObject.class);
        if (obj== null){return new MyObject ();}
        return obj;

    }
【解决方案2】:

您可以将其保存为对象或将其转换为 JSON 并保存:

store and retrieve a class object in shared preference

这也可能有帮助:

How Android SharedPreferences save/store object

它解释了如何将对象转换为 JSON,您可以使用 SharedPreferences 保存并检索/重建。

【讨论】:

    【解决方案3】:

    使用 Kotlin 会是这样的:

    fun saveUserInfoMap(userInfo: HashMap<String, Any>){
        val prefs = PreferenceManager
            .getDefaultSharedPreferences(App.appContext)
        val gson = Gson()
        val editor = prefs.edit()
        val json = gson.toJson(userInfo)
        editor.putString("user_info", json)
        editor.apply()
    }
    
    @Suppress("UNCHECKED_CAST")
    fun getUserInfoMap(): HashMap<String, Any>? {
        val prefs = PreferenceManager
            .getDefaultSharedPreferences(App.appContext)
        val gson = Gson()
        val json = prefs.getString("user_info", "")
        val typeToken = object: TypeToken<HashMap<String, Any>>(){}
        var obj: HashMap<String, Any> = HashMap()
        if (!TextUtils.isEmpty(json)) {
            obj = gson.fromJson<Any>(json, typeToken.type) as HashMap<String, Any>
        }
        return obj
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 2011-12-18
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多