将ArrayList <CustomClass>存储到SharedPreferences中

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按原样存储到SharedPreferences

我们不能直接存储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)


Bla*_*elt 1

您无法确定保存该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对象