【问题标题】:How to save variables with SharedPreferences如何使用 SharedPreferences 保存变量
【发布时间】:2013-01-31 23:14:28
【问题描述】:

我有自己的对象,需要存储以备后用。 User保存这个对象,变成JSON String,当User连接网络后,JSON String又变成对象,对它进行操作。

我的问题是,在运行时,我怎么知道如何存储对象?

Gson gson= new Gson();
String pointOfInterest = gson.toJson(point);
SharedPreferences.Editor sharedprefEditor = application_shared_preferences.edit();
sharedprefEditor.putString(?KEY?,pointOfInterest);

我可以使用什么来获取 KEY 的值?如果我使用索引,每次打开或关闭应用程序时它都会重置,这将替换我的对象。

编辑 抱歉我说的不够清楚,上面代码所在的方法可以运行任意次数,并且可以存储多个pointsOfInterest。

【问题讨论】:

  • 您可能错过了有关 SharedPreferences 的一些内容。 key 唯一标识您正在保存的值,您可以使用相同的密钥将其取回。除非您明确这样做,否则不会“重置”任何内容。不过,不要忘记commit()您的更改
  • 不要使用 SharedPreferences。它不是为存储这样的数据而设计的。顾名思义,它用于存储用户设置(尽管它也有其他用途)。简单的布尔值,字符串之类的东西。只需将您的 JSON 写入私有存储中的文件即可。

标签: android json sharedpreferences gson state


【解决方案1】:

首先,如果你使用索引,Preference 将永远存在:

例如:

sharedprefEditor.putString("JSON569",pointOfInterest);

您还可以将索引保存在其他首选项中;例如用一列分隔:

sharedprefEditor.putString("indexes","569;789;852");

您可以轻松地检查实例是否存在:

myPreference.getString("JSON789","").contentEquals("");

或者获取所有实例:

for (int anIndex:indexes)
    Log.i("TAG","Current value: "+myPreference.getString("JSON"+anIndex,""));

请多解释一下你的问题,我认为那里没有困难/

【讨论】:

  • 对不起,我忘了注意代码可以运行多次,我可能需要存储一些 PointOfInterest 对象
  • 问题是,如果我使用索引,然后应用程序被最小化,索引会被重置,所以当它再次启动时它会开始覆盖旧的
  • 将索引保存在其他首选项中_
【解决方案2】:

您可以随意命名密钥,只要保持一致即可。一种方法是在你的类中为它创建一个常量:

public class MyClass {
    private static final String OBJECT_KEY = "myObjectKey";

    ...

那么当你保存你的对象时:

Gson gson= new Gson();
String pointOfInterest = gson.toJson(point);
SharedPreferences.Editor sharedprefEditor = application_shared_preferences.edit();
sharedprefEditor.putString(OBJECT_KEY,pointOfInterest);

当您加载它时,只需使用OBJECT_KEY 从共享首选项中获取一个字符串:

String objectString = sharedPrefs.getString( OBJECT_KEY, "" );

【讨论】:

  • 感谢回复,不好意思忘了说上面的代码可以运行多次,对象可能不止一个
  • 那你最好建立自己的SQLite数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2012-02-21
相关资源
最近更新 更多