您好,在我的应用中,我在这行代码中看到了一个例外
intent.hasExtra("meta")
这是我的例外
由android.os.BadParcelableException引起
android.os.Parcel.readParcelableCreator(Parcel.java:2436)
android.os.Parcel.readParcelable(Parcel.java:2358)
android.os.Parcel.readValue(Parcel.java:2264)
android.os.Parcel.readArrayMapInternal(Parcel.java:2614)
android.os.BaseBundle.unparcel(BaseBundle.java:221)
android.os.BaseBundle.containsKey(BaseBundle.java:269)
android.content.Intent.hasExtra(Intent.java:6002)
无法启动活动ComponentInfo {xxx.Activity}:> android.os.BadParcelableException:Parcelable协议需要在类Meta上调用名为CREATOR的?Parcelable.Creator对象
我无法理解这是怎么发生的我只是要求在一个意图附加内容中存在一个键,但它会抛出一个异常。
对于测试,这种情况如何发生?我创建一个测试应用程序并创建一个parcelable对象并检查meta意图,但我的应用程序正常工作,并没有抛出异常。
//test case
Intent intent=new Intent();
intent.putExtra("META",new A());
Log.d(TAG, "onCreate:
intent.hasExtra(\"META\")="+intent.hasExtra("META"));
//this log work without exception so why i get exception in my original app?
static class A implements Parcelable{
String d="0dsfa";
int a=10;
public A(){
}
// the order of reading and write parcelable is wrong
// but I want to see that's cause of exception, which my test shows
// that's not my problem
protected A(Parcel in) {
a = in.readInt();
d = in.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(d);
dest.writeInt(a);
}
private static final Creator<A> CREATOR = new Creator<A>() {
@Override
public A createFromParcel(Parcel in) {
return new A(in);
}
@Override
public A[] newArray(int size) {
return new A[size];
}
};
@Override
public int describeContents() {
return 0;
}
}