Я пытаюсь создать приложение для 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 с помощью конструктора без аргументов? В сообщении об ошибке не совсем ясно, какова точная причина исключения.
Кто-нибудь знает, что вызывает это и как это исправить?