我有一个对象的ArrayList。该对象包含“位图”和“字符串”类型,然后分别包含这两种类型的获取器和设置器。首先,位图可序列化吗?
我将如何对其进行序列化以将其存储在SharedPreferences中?我已经看到很多人都提出了类似的问题,但似乎没有一个很好的答案。如果可能的话,我希望有一些代码示例。
如果位图不可序列化,那么如何存储此ArrayList?
非常感谢。
我有一个对象的ArrayList。该对象包含“位图”和“字符串”类型,然后分别包含这两种类型的获取器和设置器。首先,位图可序列化吗?
我将如何对其进行序列化以将其存储在SharedPreferences中?我已经看到很多人都提出了类似的问题,但似乎没有一个很好的答案。如果可能的话,我希望有一些代码示例。
如果位图不可序列化,那么如何存储此ArrayList?
非常感谢。
Answers:
是的,您可以将复合对象保存在共享的首选项中。比方说
Student mStudentObject = new Student();
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(mStudentObject);
prefsEditor.putString("MyObject", json);
prefsEditor.commit();
..现在您可以按以下方式检索对象:
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Gson gson = new Gson();
String json = appSharedPrefs.getString("MyObject", "");
Student mStudentObject = gson.fromJson(json, Student.class);
有关更多信息,请单击此处。
如果您想找回ArrayList
任何类型的对象,例如Student
,请使用:
Type type = new TypeToken<List<Student>>(){}.getType();
List<Student> students = gson.fromJson(json, type);
上面的答案有效,但不适用于列表:
要保存对象列表,请执行以下操作:
List<Cars> cars= new ArrayList<Cars>();
cars.add(a);
cars.add(b);
cars.add(c);
cars.add(d);
gson = new Gson();
String jsonCars = gson.toJson(cars);
Log.d("TAG","jsonCars = " + jsonCars);
阅读json对象:
Type type = new TypeToken<List<Cars>>(){}.getType();
List<Cars> carsList = gson.fromJson(jsonCars, type);
Type
这里的包是什么?
Type type = new TypeToken<List<?>>(){}.getType();
结果是我得到一个LinkedTreeMap,这是我的方法的定义: public static List<?> getList(String json) {
对我来说,它像这样工作:
将值放在SharedPreferances中:
String key = "Key";
ArrayList<ModelClass> ModelArrayList=new ArrayList();
SharedPreferences shref;
SharedPreferences.Editor editor;
shref = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = gson.toJson(ModelArrayList);
editor = shref.edit();
editor.remove(key).commit();
editor.putString(key, json);
editor.commit();
要从SharedPreferances获取值:
Gson gson = new Gson();
String response=shref.getString(key , "");
ArrayList<ModelClass> lstArrayList = gson.fromJson(response,
new TypeToken<List<ModelClass>>(){}.getType());
对于保存:
public static void saveSharedPreferencesLogList(Context context, List<PhoneCallLog> callLog) {
SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(callLog);
prefsEditor.putString("myJson", json);
prefsEditor.commit();
}
对于负载:
public static List<PhoneCallLog> loadSharedPreferencesLogList(Context context) {
List<PhoneCallLog> callLog = new ArrayList<PhoneCallLog>();
SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE);
Gson gson = new Gson();
String json = mPrefs.getString("myJson", "");
if (json.isEmpty()) {
callLog = new ArrayList<PhoneCallLog>();
} else {
Type type = new TypeToken<List<PhoneCallLog>>() {
}.getType();
callLog = gson.fromJson(json, type);
}
return callLog;
}
PhoneCallLog是我的自定义对象的名称。(包含字符串,长整数和布尔值)
apply
代替commit
吗?
上面的Mete'示例就像一个魅力。
这是科特林的例子
private var prefs: SharedPreferences = context?.getSharedPreferences("sharedPrefs", MODE_PRIVATE)
?: error("err")
private val gson = Gson()
救
fun saveObjectToArrayList(yourObject: YourObject) {
val bookmarks = fetchArrayList()
bookmarks.add(0, yourObject)
val prefsEditor = prefs.edit()
val json = gson.toJson(bookmarks)
prefsEditor.putString("your_key", json)
prefsEditor.apply()
}
读
fun fetchArrayList(): ArrayList<YourObject> {
val yourArrayList: ArrayList<YourObject>
val json = prefs.getString("your_key", "")
yourArrayList = when {
json.isNullOrEmpty() -> ArrayList()
else -> gson.fromJson(json, object : TypeToken<List<Feed>>() {}.type)
}
return yourArrayList
}