ウィジェット (ビューとして表される) をデータベースに格納し、後でそれらを再作成できるようにする 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();
}
}
残念ながら、in.readObject()
はメッセージとともに InvalidClassException をスローしますandroid.view.View; IllegalAccessException
。
Android の View は Object を直接拡張し、Object には引数のないコンストラクタがあるため、これは機能しないのでしょうか? または、引数なしのコンストラクターで View を呼び出そうとしていますか? エラーメッセージは、例外の正確な原因が何であるかについてあまり明確ではありません.
誰がこれを引き起こしているのか、それを修正する方法を知っていますか?