Я использую Realm как базу данных для своего приложения для Android, у меня есть фрагмент, который имеет объект RealmList, скажем, типа X'of. А также этот фрагмент содержит пейджер представления. Каждый дочерний фрагмент содержит ListView. Основной фрагмент отправляет объект X из RealmList для каждого дочернего фрагмента.Фрагмент OnSavedInstanceSate и Realm
X класс содержит RealmList, содержащий объекты типа Z. Компонент ListView в каждом дочернем фрагменте показывает информацию класса «Z» в каждой строке. Когда я прихожу к основному фрагменту во время выполнения, все работает нормально. Но если я нажимаю кнопку «домой» устройства, чтобы некоторое время убегать из приложения, приложение становится разбитым, бросая следующее исключение.
java.lang.RuntimeException: Parcelable encountered IOException writing
serializable object (name = io.realm.XRealmProxy)
at android.os.Parcel.writeSerializable(Parcel.java:1323)
at android.os.Parcel.writeValue(Parcel.java:1271)
............
Caused by: java.io.NotSerializableException: io.realm.XRealmProxy$XColumnInfo
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1366)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1673)
Проведя 3 часа в поиске в Интернете. Я понял, что каждый RealmObject поддерживает прокси-класс в фоновом режиме и не является сериализуемым объектом. Поэтому я могу понять, что фрагмент пытается достичь состояния сохраненного экземпляра, из-за неэриализуемого он бросает его. Как сообщает android doc, когда действие или фрагмент, идущие в состояние onSavedInstance, сохраняют только информацию о его представлении.
Мой вопрос в том, почему он пытается сохранить RealmList.
И любое решение для решения этой проблемы. Я попытался переопределить метод OnSavedInstance и сделать поле RealmList нулевым. Но это не сработает.
Вы, скорее всего, вручную сохраните свой список объектов где-нибудь в 'onSaveInstanceState()'. – EpicPandaForce