自定义对象的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());