2012-05-11 30 views
2

我有一个名为AllStatStruct的类。这个类包含三个属性,它们是我的类StatStructCycle,StatStructHistory和MatrixStruct的对象。每个类都扩展了DataStruct类并实现了Parcelable接口。在接口的实现中,每个类都使用readParceable()writeParceable()来读写。BadParcelableException:解组时发生ClassNotFoundException:(空类名)

在我的Activity中,我调用一个AsyncTask中的SOAP webservice并获得类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,但是给了一个额外的类加载器并使用这个来解开这些可装载的元素是行不通的。

编辑:

如你所说,我试图seperately通过AllStatStruct的几个部分。它与StatStructCycleMatrixStruct正常工作,但与StatStructHistory,仍然有一个错误抛出。

现在,我得到一个NullPointerException,当我尝试解包我的ArrayList与StatStructCycle s。我评论了历史的其他部分。

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

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

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

问候 HTZ

+0

我决定不要试图在结果令人困惑的日子之后,再次使用parcelable接口。现在我使用在我的应用程序中定义的全局变量将数据从一个活动传递到另一个活动。 [如何声明一个全局变量?](http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables) – htz

回答

0

Problem unmarshalling parcelables

看起来即使你编组是成功的,如果有空例外解组过程仍然会失败。

出于调试目的,请尝试逐个编组每个子对象。看看他们中的任何一个是否出错,然后深入研究这个问题。现在你试图一次取消3个对象,很难指出哪个对象有问题(如果有的话)。

如果它是不明确的,我建议尝试此:

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

如果这样的作品,尝试:

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

等等

相关问题