0

我在跨 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: 

我的包裹是否在此之前的某个地方损坏了,还是我读错了?

亚历克斯

4

3 回答 3

2

我也遇到过这个问题,很傻。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());
}
于 2013-05-07T16:14:08.830 回答
0

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

如何在Android中声明全局变量?

尽管如果有人对原始问题的答案有任何想法,请发布。可能在其他地方发生在其他人身上。

亚历克斯

于 2011-06-14T20:16:12.697 回答
0

Intent.setExtrasClassLoader (java.lang.ClassLoader)有帮助吗?

于 2012-08-22T23:13:11.403 回答