【问题标题】:Save Model class object in SharedPreferences在 SharedPreferences 中保存模型类对象
【发布时间】:2021-11-10 07:01:22
【问题描述】:

我是安卓开发新手。我将用户配置文件信息保存在共享首选项中,这样每当我需要显示用户名、电子邮件或其他数据时,我都会从共享首选项中调用它,而不是一次又一次地从数据库中调用。我想保存并获取完整的配置文件,而不是获取单个字符串。以下是我使用的功能

public void save(String key, String value) {
    SharedPreferences.Editor editor
        = context.getSharedPreferences("data", context.MODE_PRIVATE).edit();
    editor.putString(key, value);
    editor.commit();
}

public String get(String key) {
    SharedPreferences sharedPreferences
        = context.getSharedPreferences("data", context.MODE_PRIVATE);
    return sharedPreferences.getString(key, "");
}

我想要的功能如下所示

public void save(String key, MyModel object) {
    SharedPreferences.Editor editor
        = context.getSharedPreferences("data", context.MODE_PRIVATE).edit();
    editor.putString(key, object);
    editor.commit();
}

但共享首选项采用唯一的字符串来保存和获取。有没有可能的解决方案来保存对象?或共享偏好的任何替代方案。 (不包括 SQLite 或其他复杂数据库)

【问题讨论】:

  • 你有JSON的概念吗?

标签: java android sharedpreferences


【解决方案1】:

您可以将您的对象转换为 Json,然后将其保存为共享首选项中的字符串,如下面的代码:

public void save(String key, MyModel object) {
    String myObject = Gson().toJson(object);
    SharedPreferences.Editor editor
        = context.getSharedPreferences("data", context.MODE_PRIVATE).edit();
    editor.putString(key, myObject);
    editor.commit();
}

然后你可以像这样将它转换回对象:

public MyModel get(String key) {
    SharedPreferences sharedPreferences
        = context.getSharedPreferences("data", context.MODE_PRIVATE);
    String myObject = sharedPreferences.getString(key, "");
    return Gson().fromJson(myObject, MyModel.class);
}

【讨论】:

    【解决方案2】:

    这个用来保存数据

    public void saveData(String key, MyModel object) {
        save(key, new Gson().toJson(object));
    }
    

    这个来获取数据

    public MyModel getData(String key) {
        String data = get(key);
        return new Gson().fromJson(data, MyModel.class);
    }
    

    它是如何工作的?

    此保存方法将您的模型对象转换为 JSON 字符串,然后将该字符串保存到共享首选项中,在 get 函数中也是如此。它以 JSON 字符串的形式获取数据,然后将其转换为您的对象并返回一个值。 为了保存和获取使用您自己的功能

    【讨论】:

      猜你喜欢
      • 2020-10-28
      • 2021-09-30
      • 1970-01-01
      • 2016-03-11
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多