2016-03-01 16 views
0

嗨即時嘗試保存我的對象的ArrayList當onPause()和/或onStop()被調用,然後在應用程序已被殺死並重新啓動後從該文件中讀取數組。我試過一些不同的方法,但似乎沒有任何工作,目前這就是我所擁有的。在Android上通過會話從文件中寫入然後讀取ArrayList <Object>?

我寫代碼:

try{ 
     FileOutputStream fout = openFileOutput(FILENAME, 0); 
     ObjectOutputStream oos = new ObjectOutputStream(fout); 
     oos.writeObject(toDos); 
     oos.close(); 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 

我的代碼如下:

try{ 
     FileInputStream streamIn = openFileInput(FILENAME); 
     ObjectInputStream ois = new ObjectInputStream(streamIn); 
     if(ois.readObject() != null) { 
      list = (ArrayList<Object>) ois.readObject(); 
      ois.close(); 
     } 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 

「文件名」是一個包含字符串「data.txt中」變量 待辦事項是的名稱arrayList,它是一個位於Activity頂部的字段,它是一個Serializable對象Object的ArrayList。

不知道我在這裏做錯了什麼,我不能告訴它的寫作是否存在或問題可能在哪裏。

+0

你得到了什麼錯誤? – Thomas

+0

@Thomas根本沒有任何要求。除非我嘗試使用File x = new File(this.getFileDirs(),FILENAME),否則我會得到一個空指針異常。 – Volt

+0

使用catch語句來捕獲一般異常被認爲是一種不好的做法,請爲FileNotFoundException,IOException和ClassNotFoundException分別製作catch語句,然後查看try塊捕獲哪種類型的異常。 – Thomas

回答

0

您正在收到EOFException,因爲您正在對象中讀取兩次;一次當你檢查if語句時,再次在if語句中。改變你的代碼是這樣的:

FileInputStream streamIn = openFileInput(FILENAME); 
ObjectInputStream ois = new ObjectInputStream(streamIn); 
ToDoObject tmp = (ArrayList<ToDoObject>) ois.readObject(); 
ois.close(); 
if(tmp != null) { 
    toDos = tmp; 
} 

這段代碼完成同樣的事情,但從文件中讀取一次。

+0

謝謝,我不再有任何錯誤,但它仍然無法正常工作。真的不知道爲什麼它現在不工作。 – Volt

+0

你的活動類中調用的這些代碼段在哪裏?請張貼主要活動的更多代碼。 – Thomas

+0

現在沒有注意到它的工作原理,你建議的解決了讀/寫問題,我只是簡單地用一些其他的代碼來解決它,修復了它,現在所有的工作,感謝您的幫助。 – Volt

相關問題