Muh*_*raf 5 java android arraylist sharedpreferences
我有一个ArrayList自定义类Task
public class Task {
String name,desc;
Date date;
Context context;
public Task(String name, String desc, Date date, Context context) {
this.name = name;
this.desc = desc;
this.date = date;
this.context = context;
}
}
Run Code Online (Sandbox Code Playgroud)
我想将它保存在SharedPreferences中..我读过可以通过将其转换为Set来完成..但我不知道如何做到这一点..
有没有办法做到这一点?或者任何其他方式来存储数据而不是SharedPreferences?
谢谢 :)
编辑:
String s = prefs.getString("tasks", null);
if (tasks.size() == 0 && s != null) {
tasks = new Gson().fromJson(s, listOfObjects);
Toast.makeText(MainActivity.this, "Got Tasks: " + tasks, Toast.LENGTH_LONG)
.show();
}
protected void onPause() {
super.onPause();
Editor editPrefs = prefs.edit();
Gson gson = new Gson();
String s = null;
if(tasks.size() > 0) {
s = gson.toJson(tasks, Task.class);
Toast.makeText(MainActivity.this, "Tasks: " + s, Toast.LENGTH_LONG)
.show();
}
editPrefs.putString("tasks", s);
editPrefs.commit();
Run Code Online (Sandbox Code Playgroud)
gpr*_*our 11
我们不能直接存储ArrayList或任何其他.ObjectsSharedPrefrences
有相同的解决方法.我们可以使用GSON库.
使用这个库,我们可以将对象转换为JSON String然后存储SharedPrefrences,然后再检索JSON String并将其转换回Object.
但是,如果要保存ArrayList自定义类,则必须执行以下操作,
定义类型
Type listOfObjects = new TypeToken<List<CUSTOM_CLASS>>(){}.getType();
Run Code Online (Sandbox Code Playgroud)
然后将其转换为String并保存到共享首选项
String strObject = gson.toJson(list, listOfObjects); // Here list is your List<CUSTOM_CLASS> object
SharedPreferences myPrefs = getSharedPreferences(YOUR_PREFS_NAME, Context.MODE_PRIVATE);
Editor prefsEditor = myPrefs.edit();
prefsEditor.putString("MyList", strObject);
prefsEditor.commit();
Run Code Online (Sandbox Code Playgroud)
检索String并将其转换回Object
String json = myPrefs.getString("MyList", "");
List<CUSTOM_CLASS> list2 = gson.fromJson(json, listOfObjects);
Run Code Online (Sandbox Code Playgroud)
您无法确定保存该Context对象,并且保存它没有意义。我的建议是重写toString以返回一个 JSONObject,其中包含您想要存储在 SharedPreference 中的信息。
public String toString() {
JSONObject obj = new JSONObject();
try {
obj.put("name", name);
obj.put("desc", desc);
obj.put("date", date.getTime());
catch (JSONException e) {
Log.e(getClass().getSimpleName(), e.toString());
}
return obj.toString();
}
Run Code Online (Sandbox Code Playgroud)
并将这个 json 对象写入 SharedPreference 中。当你读回来时,你必须解析并构造你的Task对象
| 归档时间: |
|
| 查看次数: |
5379 次 |
| 最近记录: |