2014-01-16 38 views
0

我使用下面的方法從內部存儲讀取讀數:從內部存儲(反序列化)

private void deserialize(ArrayList<Alias>arrayList) { 
    try { 
     FileInputStream fis = openFileInput(filename); 
     ObjectInputStream ois = new ObjectInputStream(fis); 
     arrayList = (ArrayList<Alias>)ois.readObject(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

它讀取文件「文件名」中的「數組列表」的內容。

的「序列化」方法如下:

void serialize(ArrayList<Alias>arrayList) { 
    FileOutputStream fos; 
    try { 
     fos = openFileOutput(filename, Context.MODE_PRIVATE); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(arrayList); 
     oos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

的問題是,我每當我再次運行我的程序時,「的ArrayList」是空的。所以我想我打開錯誤的輸入模式下的文件。

我的目標是首先從文件中獲取數組,然後在應用程序中對其進行修改,然後將修改後的數組寫回文件。

有人可以幫我解決我的問題嗎?

謝謝!

+1

是'別名可序列化? – zapl

+0

@zapl別名是一個非常原始的類,它只包含兩個「字符串」作爲其成員。 –

+0

@zapl爲了使「別名」可序列化,需要做些特別的事情嗎? –

回答

0

你可以發佈你的源代碼嗎?我認爲你用來解析文件內容的方式會遇到問題。

0

這裏閱讀:

Android ObjectInputStream docs

,我讀了該方法的readObject()讀取的下一個對象。我這一點,你必須用這樣的循環:

MediaLibrary obj = null; 
while ((obj = (MediaLibrary)objIn.readObject()) != null) { 
    libraryFromDisk.add(obj); 
} 
+0

如果您知道您已經存儲了1個對象,則不需要這樣做。 – zapl

+0

(ArrayList )ois.readObject()當我讀到這個我認爲他期望多個對象... –

+0

1整個'ArrayList'對象(包括它的條目)。寫入的代碼也只有1個'oos.writeObject(someObject)',所以相反的操作是一個'ois.readObject()'。 – zapl