保存序列化的ArrayList会在Android中引发NotSerializableException

时间:2016-08-19 09:29:47

标签: java android serialization arraylist

我想将ArraList<MyClass>保存到内部存储空间。所以,我已经将Serializable实现为具有ArrayList和MyClass的类。代码如下所示:

public class CustomAdapter extends BaseAdapter implements Serializable { 
public ArrayList<TaskItems> taskList = new ArrayList<TaskItems>();
// some fields and variables
// some methods which use below method saveFile()
public void saveFile() {
    try {
      String filename = "daytodaytasks";
        FileOutputStream fileOutputStream = mContext.openFileOutput(filename, Context.MODE_PRIVATE);
//mContext is MainActivity context
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
        objectOutputStream.writeObject(taskList);
        objectOutputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
class TaskItems implements Serializable {
    String smallRectUpText;
    String smallRectDownText;
    String bigRectText;
    }
}

在CustomAdapter类中,有一些方法使用saveFile()方法。使用类引用从MainActivity onClick()方法调用所有方法。当我运行程序并通过按下按钮使用onClick方法时,我得到:

java.io.NotSerializableException: com.something.MainActivity

所以我尝试将Serializable实现为MainActivity,但后来我从MainCompctivity扩展的AppCompatAcitvity获得了相同的异常。你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

Context个对象不是Serializable

由于类TaskItems不是静态的,它可以访问CustomAdapter.this,即BaseAdapter对象,其中包含Context对象。

这就是为什么当您BaseAdapter可序列化时,它开始显示 java.io.NotSerializableException: com.something.MainActivity

Java Doc states

遍历图形时,可能会遇到不支持Serializable接口的对象。在这种情况下,将抛出NotSerializableException并将标识非可序列化对象的类。

使TaskItems成为静态类,然后它将无法从其静态上下文访问CustomAdapter.this