嗨,在我的应用中,我在这一行代码中看到了一个异常

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:可拆分协议要求在类Meta上使用一个名为CREATOR的?Parcelable.Creator对象

我不明白这是怎么发生的,我只是在意图附加中要求存在某个键,但是它引发了异常。

对于测试,如何发生这种情况? 我创建了一个测试应用程序,并创建了一个可打包对象,并检查了意图中的元数据,但我的应用程序可以正常工作并且不会引发异常。

//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 CREATOR = new Creator() {

@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;

}

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐