如何使用SharedPreferences保存变量

时间:2013-01-31 23:14:28

标签: android json sharedpreferences gson state

我有自己的对象,我需要存储以供以后使用。用户保存此对象,将其转换为JSON字符串,然后当用户连接到网络时,将JSON字符串转回到对象上执行的操作。

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

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

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

修改 对不起,我没有说清楚,上面的代码所在的方法可以运行任意次数,并且可以存储几个pointOfInterest。

2 个答案:

答案 0 :(得分: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,""));

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

答案 1 :(得分:0)

您可以根据需要为密钥命名,只需使其保持一致即可。一种方法是在课堂上为它做一个常数:

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, "" );