首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解编组时的BadParcelableException: ClassNotFoundException:(空类名)

解编组时的BadParcelableException: ClassNotFoundException:(空类名)
EN

Stack Overflow用户
提问于 2012-05-11 13:12:48
回答 1查看 8K关注 0票数 2

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

在我的活动中,我在AsyncTask中调用SOAP并获取类AllStatStruct的一个对象。通过创建一个Bundle将此对象传递给下一个活动。

代码语言:javascript
复制
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,我不知道为什么。这是痕迹:

代码语言:javascript
复制
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的几个部分。它在StatStructCycleMatrixStruct中工作得很好,但是对于StatStructHistory,仍然有一个错误抛出。

现在,我得到了一个NullPointerException,当我试图解开带有StatStructCycle的ArrayList时。我评论了历史的其他部分。

我试着用writeTypedList(List<T> list)readTypedList(List<T> list, Creator<T> c)来编写和阅读writeTypedList(List<T> list),但是它也不起作用。

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

使用调试器启动应用程序显示,封送的StatStructHistory没有空值.每个属性或listitem都被初始化。我不知道这个NullPointerException是从哪里来的。

向赫兹问好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-11 13:48:42

Problem unmarshalling parcelables

看起来,即使您的编组成功,如果存在空异常,unmarshall进程仍然会失败。

为了调试目的,试着逐个编组每个子对象。看看他们中是否有任何一个出错了,然后深入研究问题。现在,您正在尝试同时解开所有3个对象,很难确定哪个对象有问题(如果有的话)。

如果还不清楚,我建议你试一试:

代码语言:javascript
复制
bundle.putParcelable("allStatStruct", ass.StatStructCycle); 

如果这有效,请尝试:

代码语言:javascript
复制
bundle.putParcelable("allStatStruct", ass.StatStructHistory); 

等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10552062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档