解组Parcelable时的ClassNotFoundException

时间:2011-06-12 20:27:18

标签: android parcelable parcel

我在Intent中解析Parcelable时遇到问题。

我使用

创建parcelable
Intent data = new Intent();
data.putExtra(ShoppingListAdapter.parcelName, la);
setResult(Activity.RESULT_OK, data);

我在onActivityResult中收到它:

Parcelable myData = data.getParcelableExtra(ShoppingListAdapter.parcelName);

然后使用:

将其传递给另一个Activity
Intent myIntent = new Intent(this,Class.class);
myIntent.putExtra("myData", myData);
startActivityForResult(myIntent, RESULT);

我的Parcelable还有另一个Parcelable,我在其中写下并阅读了uisng:

list = in.readParcelable(null);

我尝试使用不同的类加载器,从ClassLoader.getSystemLoader()到MyClass.class.getClassLoader(),但我仍然遇到运行时异常:

06-12 21:13:04.940: ERROR/AndroidRuntime(29962): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: 

我的包裹在此之前是否已损坏,或者我读错了?

亚历

3 个答案:

答案 0 :(得分:1)

我也有这个问题,这是一个愚蠢的事情。 writeToParcel和readToParcel上方法的顺序和数量应该相同且具有相同的变量。

我的意思是:

public void writeToParcel(Parcel dest, int flags) {
   dest.writeString(title);
   dest.writeParcelable((Parcelable)this.getLocation(), flags);
   dest.writeString(value);  
}

的顺序必须与:

相同
private void readFromParcel(Parcel in){

  this.setTitle(in.readString());
  this.setLocation((Location)in.readParcelable(android.location.Location.class.getClassLoader()));
  this.setValue(in.readString());
}

答案 1 :(得分:0)

正如所指出的那样,这是一种不正确的使用方法。因此,尽管我还没有解决它,但有一种更好的方法可以做同样的事情。所以考虑一下

How to declare global variables in Android?

虽然如果有人对原始问题的答案有任何想法,请发帖。可能发生在别人的其他地方。

亚历

答案 2 :(得分:0)