自定义对象的Android ArrayList – 保存到SharedPreferences – 可序列化?
我有一个对象的ArrayList。 该对象包含types的“位图”和“string”,然后只是getters和setters两者。 首先是位图序列化?
我将如何去序列化它存储在SharedPreferences? 我看到很多人提出类似的问题,但似乎没有一个好的答案。 如果可能,我会更喜欢一些代码示例。
如果位图不是可序列化的,那么我该如何去存储这个ArrayList?
非常感谢。
是的,你可以保存你的复合对象在共享首选项。让我们说:
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);
欲了解更多信息,请点击这里。
如果你想取回任何types的对象,如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);
对于保存:
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是我的自定义对象的名称。 (包含string,长整型和布尔值)
对我来说,它是这样工作的:
将值放入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());