Невозможно сделать LazyForeignCollection нетерпеливой коллекцией

Я получаю эту ошибку при попытке прочитать чужую коллекцию из моего POJO

AndroidRuntime(589): Caused by: java.lang.IllegalStateException: Internal DAO
    object is null.  Lazy collections cannot be used if they have been deserialized.

Оскорбительная коллекция – answers1, которую я пометил как "нетерпеливую".

@ForeignCollectionField (eager=true)
private ForeignCollection<TextAnswer> answers1;

Почему тогда, когда я отлаживаю метод ниже

public List<TextAnswer> getAnswers() {      
    return new ArrayList<TextAnswer>(answers1);
}

Что это говорит мне, что коллекция является LazyForeignCollection? Я озадачен.

У меня нет проблем с этим ни в одном из моих других классов, использующих ForeignCollections :(


person MayoMan    schedule 05.11.2012    source источник
comment
Относится к: stackoverflow.com/questions/20629985 /   -  person Gray    schedule 19.12.2013


Ответы (1)


Ленивые коллекции нельзя использовать, если они были десериализованы.

Интересная проблема. Во-первых, это сообщение только в классе LazyForeignCollection. Есть ли шанс, что поле answer1 раньше было ленивым и было сериализовано? Сериализация вообще задействована? Поле dao внутри ForeignCollection никогда не должно быть null, если объект не был сериализован.

Мое предположение прямо сейчас состоит в том, что вы десериализуете предыдущую версию класса. Если это не так, то я понятия не имею.

person Gray    schedule 05.11.2012
comment
Да, раньше поле было ленивым, и я изменил его на нетерпеливое. Это то, что ты имеешь в виду? - person MayoMan; 05.11.2012
comment
И вы загружаете какие-то данные с диска или что-то старое @user965895? - person Gray; 05.11.2012
comment
Хорошо, я понимаю, что вы имеете в виду. Объект извлекается из Bundle, и он будет сериализован для помещения в Bundle. - person MayoMan; 05.11.2012
comment
Не знаю, что такое Bundle. Если он десериализуется, вам придется повторно сериализовать его. - person Gray; 06.11.2012
comment
@Gray Как изменить поле с Lazy на Eager? Предположительно, изменение аннотаций между запусками приложения не вызовет этой проблемы... верно? - А, поле сериализуется и сохраняется в Bundle, а затем десериализуется. - person Nolan Amy; 30.05.2014