intent.hasExtra(“meta”)抛出错误的可分配异常

时间:2017-10-31 08:34:15

标签: android android-intent

您好,在我的应用中,我在这行代码中看到了一个例外

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

0 个答案:

没有答案