2016-03-30 7 views
0

Я использую 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 нулевым. Но это не сработает.

Android doc

Similer question

+0

Вы, скорее всего, вручную сохраните свой список объектов где-нибудь в 'onSaveInstanceState()'. – EpicPandaForce

ответ

0

Как вы узнали. RealmObjects не очень хорошо работает, если разбираться внутри Intents. Здесь мы описали некоторые обходы: https://realm.io/docs/java/latest/#intents

Если вы действительно хотите разобрать объект через намерение, вы можете использовать что-то вроде Parceler. Это описано здесь: https://realm.io/docs/java/latest/#parceler

+0

Большое вам спасибо за ваш ответ, а также за изобретение такой базы данных owsem. – user2486322

Смежные вопросы