次のコードを使用して、リストをファイルにロードして書き出します。これは、アプリケーションを閉じて(バックグラウンド)、再起動したときに機能していましたが、現在は機能しなくなりました。さらに、電話機を再起動すると、リストは確実に保存されません。非機能的な書き込みとArraryListの取得Android
List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>();
String serfilename;
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);
serfilename = "hello";
....
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(){
super.onDestroy();
writeListToFile((ArrayList<HashMap<String, String>>) painItems,
getApplicationContext(), serfilename);
}
あなたは私のOnDestroy()とOnStop()メソッドのオーバーライドが正しくフォーマットされていると思いますか?電話機を再起動したり、バックグラウンドにしてもリストが正しく保存されますか?ヒントをありがとう、私はそれを試してみましょう。 – Kgrover
これらは、ログファイルなどに書き込んで、呼び出されたときに参照しようとします。 –
これらのonStop()およびonDestroy()でsuperメソッドを呼び出す前に、writeListToFile()を実行する必要がありますか? – Kgrover