2011-03-23 53 views
0

更新:經過一些測試後,我確定文件本身並未被創建,至少根據file.exists檢查。有任何想法嗎?序列化ArrayList android不工作

嗨我試圖序列化陣列列表,當我的應用程序退出並閱讀時它恢復。它似乎並沒有創建該文件。

這是我的代碼。

protected void onPause() { 
    super.onPause(); 

    if(!myArrayList.isEmpty()) 
    { 
     final String FILENAME = "myfile.bin"; 
     try{ 
      FileOutputStream fos; 

      fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 

      //FileOutputStream fileStream = new FileOutputStream(FILENAME); 
      ObjectOutputStream os = new ObjectOutputStream(fos); 
      os.writeObject(myArrayList); 
      os.flush(); 
      os.close(); 
     } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } 
    } 
} 

@SuppressWarnings("unchecked") 
    @Override 
    protected void onResume() { 
     super.onResume(); 

    File file = new File("myfile.bin"); 
    if(file.exists()){ 
     final String FILENAME="myfile.bin"; 
     try{ 
      FileInputStream fileStream = new FileInputStream(FILENAME); 
      ObjectInputStream os = new ObjectInputStream(fileStream); 
      myArrayList = (ArrayList<MyObject>)os.readObject(); 
      os.close(); 
     } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      }catch(IOException e){ 
       e.printStackTrace(); 
     } 
    } 




} 

任何想法? My MyObject類實現可序列化。

+0

你的catch語句中的''e.getMessage()''完全沒有任何作用,所以你基本上默默地​​忽略了任何拋出的異常。改進錯誤處理將幫助您找出問題所在。 – 2011-03-23 21:47:45

+0

@Chris Knight增加了一些更多的處理filenotfound和ioexcpetion在logcat /錯誤日誌中仍然沒有錯誤。 – 2011-03-23 21:51:43

+0

你可以用新的錯誤處理更新上面的代碼嗎? – 2011-03-23 21:55:06

回答

0
os.writeObject(myArrayList); 
os.flush(); 
os.close(); 

在writeObject之後立即嘗試os.close(),它應該調用flush()。

+0

這是我的原始代碼,我在谷歌的某個地方看到它作爲建議後添加了flush。仍然沒有工作。 – 2011-03-23 21:58:43

+0

確認MyObject是否在類路徑中,查看簡單的ArrayList 是否有效。 – Naveen 2011-03-23 22:10:12

+0

這個類與主程序在同一個包/目錄下,如果這就是你的意思? – 2011-03-23 22:20:45

1

通過將FileInputStream fileStream = new FileInputStream(FILENAME)更改爲FileInputStream fileStream= openFileInput(FILENAME)來實現它的工作。

+0

很高興看到你解決了你的問題!不要忘了點擊左邊的複選標記來標記答案。 – 2011-03-25 01:15:04