2011-05-06 38 views
0

我試圖存儲一些對象以備將來在網絡故障時處理。 我有一個NameValuePairs在一個Serializeable類的數組...我已經消除了一切,但我得到一個NotSerializeableException ...我從來沒有試圖寫一個Serializeable對象來存檔之前...我'敢肯定,我在做一些愚蠢的事,但還看不出來是什麼...我在這個可串行化嘗試中做了什麼錯誤

public void store(){ 
    FileOutputStream fos = null; 
    ObjectOutputStream out = null;   
    try { 
     Log.d(TAG, "Upload failed, saving file to " + path + "/" + fileName); 
     File f = new File(path); 
     if(!f.exists()){ 
      try{ 
      (new File(path)).mkdirs(); 
      }catch(Exception e){ 
       Log.d(TAG, "failed to create directory " + path); 
      } 
     } 
     f = new File(path + "/" + fileName); 
     fos = new FileOutputStream(f); 
     out = new ObjectOutputStream(fos); 
     Parts p = new Parts(parts); 
     out.writeObject(p); //THIS IS THE LINE WHERE IT DIES WITH THAT EXCEPTION 
     out.flush(); 
     out.close(); 
    } catch (IOException e) { 
     Log.d(TAG, "FAILED TO SAVE file: " + path + "/" + fileName); 
     Log.d(TAG, "error:" + e); 
    } catch(Exception e){  
     Log.d(TAG, "error:" + e); 
    } 
} 

private class Parts implements Serializable{   
    private static final long serialVersionUID = -7603433209073871781L; 
    @SuppressWarnings("unused") 
    public NameValuePair [] p; 
    public Parts(NameValuePair [] parts){ 
     this.p = parts; 
    }  
} 
+1

什麼是進入NameValuePair?也許一個不可序列化的值? – 2011-05-06 00:31:59

+0

嘗試創建一個獨立的程序來完成此操作。它看起來像problrm是你在NameValuePair中放入的東西。包含在你的對象中的所有東西都需要可序列化。 – 2011-05-06 00:32:58

+0

不,他們都是這樣或那樣的字符串...有沒有我應該尋找的非法價值? – 2011-05-06 00:33:46

回答

3

對象可序列化是否實現Serializable及其所有非瞬態和非靜態字段的是序列化的。你的NameValuePair是可串行化的嗎?

後續行程:看docs,NameValuePair實施Serializable。另外String[]是可序列化的。你看到的例外是什麼?

+0

啊...我明白你在說什麼......它不是「我的」NameValuePair ...它是org.apache.commons.httpClient.NameValuePair,我必須假設它不是......在我去複製之前所有它的內部成一個規則哈希,哈希序列化?我知道向量是,但他們很醜:) – 2011-05-06 00:41:04

+0

嗯...我修改了我的零件對象(在過程中改變了我的問題......沒有改進,在同一個地方失敗......是String [] not可串行化?如果不是,那麼什麼是? – 2011-05-06 12:50:59

0

您可能需要部分中的默認構造函數。

+0

序列化不需要無參數構造函數。 – 2011-05-06 16:07:19

相關問題