Android内部对象存储

Android内部对象存储,android,object,storage,Android,Object,Storage,我正在尝试将EditText的ArrayList(ArrayOne、ArrayTwo和ArrayTree)保存到内部存储器中。如评论所述,它清楚地表明它试图保存,但此后我再也没有得到祝酒词。感谢您提供有关为什么不显示“保存完成”或任何错误的帮助 public void save(Context c) { String fileName; Toast.makeText(this, "Attempting Save", Toast.LENGTH_SHORT).show();//THI

我正在尝试将EditText的ArrayList(ArrayOne、ArrayTwo和ArrayTree)保存到内部存储器中。如评论所述,它清楚地表明它试图保存,但此后我再也没有得到祝酒词。感谢您提供有关为什么不显示“保存完成”或任何错误的帮助

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 */ }
        }
    }
}

我认为这个错误出现在您的第一个Try块中,因为您只捕获了FileNotFound和IOException-仅出于调试目的,您可以捕获通用异常并打印出stacktrace

如果它也有帮助的话,这就是我所做的:

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(); java.io.File File=new java.io.File(“/sdcard/mystorage/ArrayOne.bin”); ObjectOutputStream out=新的ObjectOutputStream(新的BufferedOutputStream(新的FileOutputStream(文件))); out.writeObject(obj); out.close(); 最好的


-serkan

如果在“尝试保存”之后没有显示任何内容,则此块中会出现异常

 catch (IOException e)
         {
             e.printStackTrace();
         } 
你不会在任何祝酒词中看到它。此外,您也可以在这里以这种方式不做任何事情,除了您的例外:

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

而不是为你的留言干杯。。尝试使用LogCat进行去bug,这很容易使用,而且您不需要在代码中添加toast代码。告诉我进展如何。

问题是EditText类不可序列化

如果调试并在printStackTrace上设置断点,然后检查IOException,它会告诉您

catch (IOException e
{
     e.printStackTrace();
} 
类必须使用“implements Serializable”,以便将它们作为对象写入,而EditText没有

您也不能扩展该类并添加serializable标记,因为基础类仍将引发异常


我建议您要么通过自己的类序列化数据,要么保存试图使用其他方法执行的任何操作

你好,你试过调试吗?它是否显示“找不到”?我尝试过调试,在“尝试保存”之后没有显示任何内容。我不知道代码从哪里来。请尝试调试。如果你调试它,你将不需要任何其他人的帮助来解决这个问题。只要跟踪代码的去向,就可以完成:)我可以制作一个包含EditText的文本的字符串的ArrayList。。。字符串是否可序列化?感谢you@Andrew-是的,基本类型应该序列化很好,字符串可以序列化dok,你能告诉我什么地方可以解释如何“通过我自己的类序列化数据”@Andrew,看看上面的扩展答案,但是记住如果你在类中放入任何类型的不可序列化对象,你也会遇到同样的问题