Das*_*tor 2 database serialization android view illegalaccessexception
我正在尝试制作一个Android应用程序,它将小部件(表示为视图)存储在数据库中,然后能够在以后重新创建它们.
以下是它的要点:
public class DBSerializer<T extends View & Serializable> {
public int storeWidget(T widget) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bytes);
out.writeObject(widget);
byte[] data = bytes.toByteArray();
bytes.close();
out.close();
<store "data" in database>;
return <unique database id>;
}
public T getWidget(int id) {
byte[] data = <get data from database for the given id>;
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(data));
return (T)in.readObject();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,in.readObject()抛出带有消息的InvalidClassException android.view.View; IllegalAccessException.
由于Android的View直接扩展了Object,而Object有一个无参数的构造函数,所以不应该这样吗?或者它是否尝试使用无参数构造函数调用View?错误消息不清楚异常的确切原因是什么.
有谁知道是什么导致了这个以及如何解决它?
仅仅因为基类具有无参数构造函数,这并不意味着子类会.TextView没有,大多数其他视图也没有.
View完整地序列化并在以后检索它似乎不是一个好主意,因为View有一个上下文,它可能在您提交序列化版本和检索它的时间之间被销毁.
也许您只能在Parcel中存储所需的数据,并使用它来获取字节数组,然后您可以将其作为blob存储在数据库中.有可能,你可能会发现这种方法与onSaveInstanceState()方法一起使用是有用的.