2011-07-05 142 views
2

我試圖將EditText的ArrayLists(ArrayOne,ArrayTwo和ArrayThree)保存到內部存儲。正如評論,它清楚地表明,它試圖保存,但我從來沒有得到另一個TOAST。任何幫助,爲什麼它不顯示「保存完成」或任何錯誤,讚賞。Android內部對象存儲

public void save(Context c) 
{ 
    String fileName; 
    Toast.makeText(this, "Attempting Save", Toast.LENGTH_SHORT).show();//THIS SHOWS 
    if(semester.getText().toString().length() == 0) 
    { 
     Toast.makeText(c, "Please enter a filename", Toast.LENGTH_SHORT).show(); 
    } 
    else 
    { 
     fileName = "test.dat"; 
     FileOutputStream fos = null; 
     ObjectOutputStream oos = null; 
     try 
     { 
      fos = this.openFileOutput(fileName, Context.MODE_PRIVATE); 
      oos = new ObjectOutputStream(fos); 
      oos.writeObject(ArrayOne); 
      oos.writeObject(ArrayTwo); 
      oos.writeObject(ArrayThree); 
      Toast.makeText(c, "Save Completed", Toast.LENGTH_SHORT).show(); //THIS NEVER SHOWS 
     } 
     catch (FileNotFoundException e) 
     { 
      Toast.makeText(c, "Could not find " + fileName + " to save.", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       if (oos != null) 
        oos.close(); 
       if (fos != null) 
        fos.close(); 
      } 
      catch (Exception e) 
      { /* do nothing */ } 
     } 
    } 
} 
+0

你好,你嘗試調試?它顯示「無法找到」? – PedroAGSantos

+0

我沒有嘗試調試,沒有任何顯示「嘗試保存」後。我不知道代碼從哪裏出發。 – Andrew

+0

嘗試調試。如果你調試它,你不需要任何其他人的幫助來解決這個問題。只是跟蹤你的代碼去的地方,你已經完成:) –

回答

2

的問題是的EditText類是不可序列

如果調試,把一個破發點上的printStackTrace並檢查IOException異常,它會告訴你,

catch (IOException e 
{ 
    e.printStackTrace(); 
} 

類必須使用「實現Serializable」,以便將它們寫成EditText沒有的對象。

您不能擴展該類並添加可序列化標記,因爲底層類仍會拋出異常。

我建議你要麼通過自己的課程序列化數據,要麼保存你想用其他方法做的任何事情。

+0

我可以只是做一個字符串的ArrayList包含來自EditText的文本......字符串可序列化嗎?謝謝 – Andrew

+0

@Andrew - 是的基本類型應該很好序列化,字符串可以序列化 – Idistic

+0

好的,你能指點我什麼地方可以解釋如何「通過我自己的班級序列化數據」 – Andrew

0

我認爲錯誤是在你的第一次嘗試塊淹沒,因爲你只抓住FileNotFound和IOException異常像 - 只是爲了調試的目的,你可以捕捉到一般異常,並打印出堆棧跟蹤。

如果它也有助於這是我做的:

 
java.io.File file = new java.io.File("/sdcard/mystorage/ArrayOne.bin"); 
ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file))); 
out.writeObject(obj); 
out.close(); 

最佳

-serkan

0

如果「試圖保存」後沒有任何顯示you're得到一些例外,在此塊

catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

而且you're沒有任何吐司查看它。你也可以在這裏以這種方式無所事事您的例外:

catch (Exception e) 
     { /* do nothing */ } 

相反敬酒你的消息..嘗試使用的logcat爲debbugging,很容易使用,你也不必把麪包碼在你的代碼中。告訴我怎麼樣。