我想将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获得了相同的异常。你能帮帮我吗?
答案 0 :(得分:2)
Context
个对象不是Serializable
。
由于类TaskItems
不是静态的,它可以访问CustomAdapter.this
,即BaseAdapter
对象,其中包含Context
对象。
这就是为什么当您BaseAdapter
可序列化时,它开始显示
java.io.NotSerializableException: com.something.MainActivity
遍历图形时,可能会遇到不支持Serializable
接口的对象。在这种情况下,将抛出NotSerializableException
并将标识非可序列化对象的类。
使TaskItems
成为静态类,然后它将无法从其静态上下文访问CustomAdapter.this
。