2011-07-05 114 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,很容易使用,你也不必把面包码在你的代码中。告诉我怎么样。