gpt4 book ai didi

java - Android 将 ArrayList 保存为 SharedPreference
转载 作者:行者123 更新时间:2023-12-01 18:26:17 27 4
gpt4 key购买 nike

我目前正在尝试将包含 POJO 的 ArrayList 保存为 SharedPreference,以便在用户重新进入应用程序时检索它,但它似乎不起作用。

这就是我所做的:

回调方法

ArrayList<myObject> myList;
ArrayList<Boolean> myobject_repeat;
MyListAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myview);
lw = (ListView) findViewById(R.id.lw);
myList= new ArrayList<myObject>();
myobject_repeat = new ArrayList<Boolean>();
adapter = new MyListAdapter(this, myList);
lw.setAdapter(adapter);
}

@Override
protected void onPause() {
saveArray();
super.onPause();
}

@Override
protected void onResume() {
loadArray(this);
super.onResume();
}

保存/加载数组的方法

public boolean saveArray() {
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
SharedPreferences.Editor edit = pref.edit();
edit.putInt("list_size", myList.size());

for (int i = 0; i < myList.size(); i++) {
edit.remove("id" + i);
edit.remove("repeat" + i);
edit.putLong("id" + i, myList.get(i).getId());
edit.putBoolean("repeat" + i, myList.get(i).isRepeat());
}

return edit.commit();
}

public void loadArray(Context c) {
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(c);
myList.clear();
myList2.clear();
int listsize = pref.getInt("list_size", 0);

for (int i = 0; i < listsize; i++) {
MyObject tmpObject = new MyObject();
tmpObject.setId(pref.getLong("id" + i, 0));
tmpObject.setRepeat(pref.getBoolean("repeat" + i, false));
myList.add(tmpObject);
}

}

这是我向数组添加对象的位置

@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent result) {
super.onActivityResult(requestCode, resultCode, result);

if (resultCode == RESULT_OK) {
int hour = result.getExtras().getInt("hour");
int minute = result.getExtras().getInt("minute");
boolean repeat = result.getExtras().getBoolean("repeat");
setUpObject(hour, minute, repeat);
}
}

private void setUpObject(int hour, int minute, boolean repeat) {

//Doing magic tricks

MyObject tmpObject= new MyObject ();
tmpObject.setHours(hour);
tmpObject.setMinutes(minute);
tmpObject.setRepeat(repeat);
tmpObject.setId(timeInMs);

myList.add(tmpObject);
adapter.remove(tmpObject);
adapter.add(tmpObject);
adapter.notifyDataSetChanged();
}

这似乎不起作用。当我调试它时,列表是空的。如果我在没有加载/保存方法的情况下运行应用程序,它会按预期工作,但如您所见,列表不会保留在 SharedPreferences 中,因此当用户导航回我的 Activity 时不可用。

非常感谢这里的任何帮助。

马库斯

最佳答案

您可以使用GSON library .

您可以将 ArrayList 转换为字符串并存储到首选项,然后在返回时将该字符串转换为相同的 ArrayList。

   //-- code to convert list to string using Gson
Type listType = new TypeToken<List<myObject>>() {}.getType();
Gson gson = new Gson();
String json = gson.toJson(target, listType);
// store this string to shared preference


//-- code to convert this string to list
String json = gson.toJson(target, listType);
List<String> target2 = gson.fromJson(json, listType);

关于java - Android 将 ArrayList<Object> 保存为 SharedPreference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26063583/

27 4 0