У меня есть круговой рабочий процесс, например
A -> B -> C -> A -> B -> C -> A -> B -> C...
Я передаю Parcelable из активности B в C. В первый раз это работает. Второй раз это дает мне
Parcel android.os.Parcel@405156d0: распаковка кода неизвестного типа 7471204 по смещению 1108
В строке чтение объекта.
Объект не изменился. Я не знаю, точно ли это тот же экземпляр, но, по крайней мере, содержимое точно такое же. Почему в первый раз работает, а во второй нет?
Иногда бывает и с первого раза.
Я попытался удалить все при записи/чтении (тестирование только с одним целочисленным полем) и все равно получаю то же самое.
При ошибке объект вообще не читается, выполняется строка с getParcelable()
, но никогда не выполняется createFromParcel
и далее конструктор. Просто выдает ошибку и ничего не делает. Так что это не ошибка парцелляции полей.
Я совершенно не в курсе...
Я попытался воспроизвести с очень маленькой тестовой средой - 2 действия и очень маленький объект, где я могу передать посылку столько раз, сколько захочу, и это правильно.
Я не могу опубликовать здесь весь свой код.
Я только хочу знать, какие вещи могут вызывать эту ошибку. writeToParcel
и конструктор правильные, данные пишутся и читаются в том же порядке, правильные tpyes, есть еще переменная CREATOR тоже правильная, 100 раз все проверил. И, как сказано, это работает много раз. Иногда данные в объекте точно такие же (проверено, каждое поле содержит одно и то же значение), первый раз работает, второй раз показывает этот "Unmarshalling unknown type".
Еще одна вещь, которая довольно интересна и может быть связана, и я тоже не понимаю, заключается в том, что посылка, хотя я выполняю putExtra
только один раз, записывается дважды. Ставлю логи и точно putExtra
выполняется только один раз. Но writeToParcel
выполняется дважды... не знаю почему. В упрощенном примере этого не происходит.
Любая подсказка приветствуется. Я проделал всю работу, чтобы передать свои параметры везде, используя Parcelable, и их много, потому что все говорят: «Я настоятельно рекомендую вместо этого использовать Parcelable», вы говорите, что ваши зубы кровоточат, и получаете «используйте Parcelable». Теперь я использую Parcelable, и все, что у меня есть, это новая куча проблем.
getExtra
вonCreate
методе своей деятельности? - person Spencer   schedule 23.10.2012onCreate()
. Есть решение, советы? - person Ovidiu Latcu   schedule 01.02.2013