将Serializable对象写入外部存储时java.io.NotSerializableException?

UMA*_*MAR 14 serialization android

朋友们,

我正在使用以下代码将Serializable对象写入外部存储.

它抛出我的错误java.io.NotSerializableException甚至我的对象是可序列化的任何人指导我我在做什么错?

public class MyClass implements Serializable 
{

// other veriable stuff here...
    public String title;
    public String startTime;
    public String endTime;
    public boolean classEnabled;
    public Context myContext;

 public MyClass(Context context,String title, String startTime, boolean enable){
            this.title = title;
            this.startTime = startTime;
            this.classEnabled = enable;
            this.myContext = context;

}

 public boolean saveObject(MyClass obj) {

        final File suspend_f=new File(cacheDir, "test");

            FileOutputStream   fos  = null;
            ObjectOutputStream oos  = null;
            boolean            keep = true;

            try {
                fos = new FileOutputStream(suspend_f);
                oos = new ObjectOutputStream(fos);
                oos.writeObject(obj);   // exception throws here
            }
            catch (Exception e) {
                keep = false;


            }
            finally {
                try {
                    if (oos != null)   oos.close();
                    if (fos != null)   fos.close();
                    if (keep == false) suspend_f.delete();
                }
                catch (Exception e) { /* do nothing */ }
            }


            return keep;


        }

}
Run Code Online (Sandbox Code Playgroud)

并从活动类调用以保存它

 MyClass m= new MyClass(this, "hello", "abc", true);
 boolean  result =m.saveObject(m);
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Jes*_*eke 54

由于您的类中的Context字段,这会失败.上下文对象不可序列化.

根据Serializable文档 - "当遍历图形时,可能会遇到不支持Serializable接口的对象.在这种情况下,将抛出NotSerializableException并识别非可序列化对象的类."

您可以完全删除Context字段,也可以将transient属性应用于Context字段,以便不对其进行序列化.

public class MyClass implements Serializable 
{
    ...
    public transient Context myContext;
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 难道你不能简单地为上下文字段设置"瞬态"吗? (10认同)
  • 太糟糕了我没有写自己的答案然后...... :) (3认同)