Я сохраняю и записываю ArrayList, используя следующий код в файл. Этот метод работает для поддержания списка только тогда, когда приложение является фоновым (onStop (), я полагаю), но когда я перезагружаю телефон, мой список теряется:
@SuppressWarnings("unchecked")
private ArrayList<HashMap<String, String>> loadListFromFile(
ArrayList<HashMap<String, String>> masterlistrev) {
try {
FileInputStream fis = openFileInput(serfilename);
ObjectInputStream ois = new ObjectInputStream(fis);
masterlistrev = (ArrayList<HashMap<String, String>>) ois
.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return masterlistrev;
}
private void writeListToFile(
ArrayList<HashMap<String, String>> masterlistrev, Context ctx,
String filename) {
FileOutputStream fos;
try {
fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(masterlistrev);
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
protected void onStop() {
super.onStop();
writeListToFile((ArrayList<HashMap<String, String>>) painItems,
getApplicationContext(), serfilename);
}
protected void onDestroy(){
writeListToFile((ArrayList<HashMap<String, String>>) painItems,
getApplicationContext(), serfilename);
super.onDestroy();
}
РЕДАКТИРОВАТЬ - МЕТОДОМ СОЗДАНИЯ
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addscreen);
// getPainItems from the saved file
if (loadListFromFile((ArrayList<HashMap<String, String>>) painItems) != null)
painItems = loadListFromFile((ArrayList<HashMap<String, String>>) painItems);
// if it's the first time opening the app, then go to 'AddMyInfo.class'
serfilename = "hello";
SharedPreferences settings = this.getSharedPreferences("MyApp", 0);
SharedPreferences.Editor e = settings.edit();
boolean firstrun = settings.getBoolean("firstrun", true);
if (firstrun) {
e.putBoolean("firstrun", false);
e.commit();
Intent intent = new Intent(this, AddMyInfo.class);
startActivity(intent);
}
// initialize painTitle and set its font
painTitle = (TextView) findViewById(R.id.painTitle);
Typeface font = Typeface.createFromAsset(getAssets(),
"Chantelli_Antiqua.ttf");
painTitle.setTypeface(font);
listthings = (ListView) findViewById(R.id.listthings);
from = new String[] { "row_1", "row_2" };
to = new int[] { R.id.row1, R.id.row2 };
adapter = new SimpleAdapter(this, painItems, R.layout.mylistlayout,
from, to);
listthings.setAdapter(adapter);
listthings.setOnItemClickListener(this);
listthings.setOnItemLongClickListener(this);
addButton = (Button) findViewById(R.id.addButton);
addButton.setOnClickListener(this);
listthings.setChoiceMode(CHOICE_MODE_SINGLE);
}
Как вы можете видеть, я переопределил методы OnStop () и OnDestroy, чтобы попытаться это сделать. Я положил writeListToFile () в методе OnCreate (). Любое решение приветствуется.