У меня есть класс AllStatStruct. Этот класс содержит три атрибута, которые являются объектами моих классов StatStructCycle, StatStructHistory и MatrixStruct. Каждый класс расширяет класс DataStruct и реализует интерфейс Parcelable. В реализации интерфейса каждый класс читается и записывается с использованием readParceable()
или writeParceable()
.
В своей деятельности я вызываю веб-сервис SOAP в AsyncTask и получаю объект класса AllStatStruct
. Этот объект передается следующему действию путем создания Bundle
:
protected void onPostExecute(final AllStatStruct ass) {
if (ass != null) {
if (dialog.isShowing()) {
dialog.dismiss();
}
Bundle bundle = new Bundle();
bundle.putParcelable("allStatStruct", ass);
intent = new Intent(packageContext, PrivateView.class);
intent.putExtras(bundle);
startActivity(intent);
} else {
KreativBarometerMainView.this.showDialog(9999);
}
}
Маршалинг посылки работает хорошо, как я могу видеть на своих выходных данных трассировки в LogCat. Но при демаршалинге посылки возникает исключение ClassNotFoundException, и я понятия не имею, почему. Это след:
05-11 15:02:59.796: E/AndroidRuntime(8647): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling:
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readParcelable(Parcel.java:1958)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct.<init>(AllStatStruct.java:45)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct$1.createFromParcel(AllStatStruct.java:70)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.net.structs.AllStatStruct$1.createFromParcel(AllStatStruct.java:1)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readParcelable(Parcel.java:1981)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readValue(Parcel.java:1846)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Parcel.readMapInternal(Parcel.java:2083)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Bundle.unparcel(Bundle.java:208)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.os.Bundle.getParcelable(Bundle.java:1100)
05-11 15:02:59.796: E/AndroidRuntime(8647): at de.kreativBarometer.ui.PrivateView.onCreate(PrivateView.java:693)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-11 15:02:59.796: E/AndroidRuntime(8647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1628)
05-11 15:02:59.796: E/AndroidRuntime(8647): ... 11 more
Как видите, ненайденному классу не присвоено имя! Итак, он ищет класс с именем "" и, конечно же, не найден.
Понятия не имею, почему это происходит. Кто-нибудь может мне помочь? Я уже пытался поиграть с ClassLoader, но дать намерению дополнительный загрузчик классов и использовать его для демаршалинга parcelables не работает.
РЕДАКТИРОВАТЬ:
Как вы предложили, я попытался передать несколько частей AllStatStruct по отдельности. Он отлично работает с StatStructCycle
и MatrixStruct
, но с StatStructHistory
все равно возникает ошибка.
Теперь я получаю NullPointerException
, когда пытаюсь демаршалировать свой ArrayList с StatStructCycle
в нем. Я прокомментировал другие части истории.
Я пытался писать и читать ArrayList с writeTypedList(List<T> list)
и readTypedList(List<T> list, Creator<T> c)
, но он тоже не работает.
Поскольку я использую ArrayLists, я также сократил их емкость до их реального размера, используя trimToSize()
, потому что я думал, что "пустые" слоты ArrayList могут вызвать проблему. Но опять же, это не так ...
Запуск приложения с отладчиком показывает, что упорядоченный StatStructHistory
не имеет пустых значений ... каждый атрибут или элемент списка инициализируется. Я понятия не имею, откуда это NullPointerException
.
С уважением, HTZ