gpt4 book ai didi

android - BadParcelableException : ClassNotFoundException when unmarshalling: (empty classname)

转载 作者:行者123 更新时间:2023-11-29 13:59:01 28 4
gpt4 key购买 nike

我有一个名为 AllStatStruct 的类。这个类包含三个属性,它们是我的类 StatStructCycle、StatStructHistory 和 MatrixStruct 的对象。每个类都扩展了类 DataStruct 并实现了 Parcelable 接口(interface)。在接口(interface)的实现中,每个类都是使用readParceable()来读写的。或 writeParceable() .

在我的 Activity 中,我在 AsyncTask 中调用 SOAP 网络服务并获取类 AllStatStruct 的对象.通过创建 Bundle 将此对象传递给下一个 Activity :

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,但是给 Intent 一个额外的类加载器并使用这个来解码 parcelables 是行不通的。

编辑:

正如您所建议的,我尝试分别传递 AllStatStruct 的几个部分。它适用于 StatStructCycleMatrixStruct , 但带有 StatStructHistory , 仍然会抛出错误。

现在,我得到一个 NullPointerException ,当我尝试用 StatStructCycle 解码我的 ArrayList 时在里面。我注释掉了历史的其他部分。

我尝试用 writeTypedList(List<T> list) 写入和读取 ArrayList和 readTypedList(List<T> list, Creator<T> c) , 但它也不起作用。

当我使用 ArrayLists 时,我还通过使用 trimToSize() 将它们的容量调整到它们的实际大小。 ,因为我认为 ArrayList 的“空”插槽可能会导致问题。但同样,情况并非如此......

使用调试器启动应用程序显示,编码 StatStructHistory没有空值...每个属性或列表项都已初始化。我不知道这个 NullPointerException 在哪里来自。

最好的问候赫兹

最佳答案

Problem unmarshalling parcelables

看起来即使编码成功,如果存在空异常,解码过程仍然会失败。

出于调试目的,请尝试将每个子对象一一编码。查看其中是否有任何错误,然后深入研究问题。现在,您正试图一次解码 3 个对象,但很难确定哪个对象有问题(如果有的话)。

如果不清楚,我建议试试这个:

bundle.putParcelable("allStatStruct", ass.StatStructCycle); 

如果可行,请尝试:

bundle.putParcelable("allStatStruct", ass.StatStructHistory); 

等...

关于android - BadParcelableException : ClassNotFoundException when unmarshalling: (empty classname),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10552062/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com