String strJson = sharedPref.getString("jsondata","0");//second parameter is necessary ie.,Value to return if this preference does not exist.
if (strJson != null) {
try {
JSONObject response = new JSONObject(strJson);
} catch (JSONException e) {
}
}
public void saveData(View view) {
User user = new User(1, "Rajneesh", "hi this is rajneesh shukla");
userList.add(user);
SharedPreferences preferences = getSharedPreferences("DATA" , MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
Gson gson = new Gson();
String s = gson.toJson(userList);
editor.putString("USER_DATA", s);
editor.apply();
}
public void logData(View view) {
SharedPreferences preferences = getSharedPreferences("DATA", MODE_PRIVATE);
String s = preferences.getString("USER_DATA", "Data is not saved" );
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<User>>(){} .getType();
ArrayList<User> mUser = gson.fromJson(s, type);
}
# 1 楼答案
Java中的JSON对象没有实现可即时序列化。我见过其他人扩展该类以允许这样做,但对于您的情况,我只建议将JSON对象存储为字符串,并使用其toString()函数。我在这方面取得了成功
为了找回它:
http://developer.android.com/reference/org/json/JSONObject.html#JSONObject(java.lang.String)
# 2 楼答案
要在共享首选项中保存json数组,可以在类中使用如下方法
在共享偏好类中
调用值
# 3 楼答案
直接保存JSON。这样看:您正在封装数据表示。如果你序列化了一个特定的对象格式,你将不得不使用该对象格式,或者必须处理该对象可能发生的更改,并担心将来从旧的序列化格式升级到新的序列化格式。把它保存为JSON,你可以随心所欲地膨胀
# 4 楼答案
这取决于阵列的大小。假设它不是非常大(小于几百Kb),只需将其存储到共享首选项中即可。如果比这个大,你可以把它保存到一个文件中
# 5 楼答案
是的,你可以省钱
# 6 楼答案
我也做了同样的事。。。将objet序列化为json字符串,并将其保存到共享pref中。没问题,但要明白prefs最终是一个XML文件,所以如果你经常读/写它,它的性能就不会很好