我正在嘗試將包含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