我正在尝试将包含POJO的ArrayList保存为SharedPreference,以便在用户重新输入应用程序时检索它,但似乎不起作用。Android将ArrayList <Object>保存为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();
}
T他似乎没有工作。当我调试它时,列表是空的。如果我在没有加载/保存方法的情况下运行该应用程序,它将按预期工作,但正如您所看到的,这些列表不会在SharedPreferences中保留,因此在用户导航返回到我的活动时不可用。
这里的任何帮助真的很感激。
马库斯
哦,我没有使用onActivityResult来填写数据,这很棘手:) – sotcha 2014-09-27 11:24:02
感谢您的努力tho – Marcus 2014-09-27 11:40:47