首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android内部对象存储

Android内部对象存储
EN

Stack Overflow用户
提问于 2011-07-05 21:03:12
回答 2查看 1.8K关注 0票数 2

我正在尝试将EditText的ArrayLists(ArrayOne、ArrayTwo和ArrayThree)保存到内部存储器。正如所评论的,它清楚地表明它试图保存,但在那之后我再也没有得到过敬酒。任何帮助,因为它不显示“保存已完成”或任何错误是感激的。

代码语言:javascript
复制
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 */ }
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-08 00:39:15

问题是EditText类是不可序列化的

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

代码语言:javascript
复制
catch (IOException e
{
     e.printStackTrace();
} 

类必须使用“实现可序列化”才能将它们写出为对象,这是EditText所没有的。

您也不能扩展类并添加可序列化标记,因为底层类仍然会抛出异常。

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

票数 2
EN

Stack Overflow用户

发布于 2011-07-07 22:24:35

如果在“尝试保存”之后什么也没有显示,你就会在这个块中得到一些异常。

代码语言:javascript
复制
 catch (IOException e)
         {
             e.printStackTrace();
         } 

而且你不会在任何Toast中看到它。你也可以在这里以这种方式对你的异常什么都不做:

代码语言:javascript
复制
 catch (Exception e)
        { /* do nothing */ }

而不是为你的信息干杯..尝试使用LogCat来进行除虫,它很容易使用,而且你不需要在代码中放入toast代码。告诉我进展如何。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6583083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档