1

我将意图存储在 onSaveInstanceState 上。但是我在 onCreate 上 getParcelable 时遇到了问题。我得到了 ClassNotFoundException。

如果我尝试单独使用 MyParcel 来放置 Parcelable,我不会得到异常,但是如果我将它放在意图中并通过 bundle 传递,然后使用 getParcelable 从 bundle 中获取?我得到了例外。

请帮我。请...

这是我的代码。

@Override
protected void onSaveInstanceState(Bundle outState) {
    Intent intent = new Intent(getIntent());
    outState.putParcelable("SAVED_INTENT", intent);
    super.onSaveInstanceState(outState);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent();
    if (savedInstanceState != null && savedInstanceState.containsKey("SAVED_INTENT")) {
        intent = savedInstanceState.getParcelable("SAVED_INTENT");
        MyParcel mParcel = intent.getExtras().getParcelable("EXTRA_PARCEL");
    }
}

我的包裹类

public class MyParcel implements Parcelable, Serializable{

    public String parcel_string;
    public List<MyUrl> my_url;

    public MyParcel(){
        my_url = new ArrayList<Url>();
    }

    public MyParcel(Parcel in){
        parcel_string = in.readString();
        my_url = new ArrayList<MyUrl>();
        in.readTypedList(my_url, MyUrl.CREATOR);
    }

    public static final Parcelable.Creator<MyParcel> CREATOR = new Parcelable.Creator<MyParcel>(){
        @Override
        public MyParcel createFromParcel(Parcel in) {
            return new MyParcel(in);
        }

        @Override
        public MyParcel[] newArray(int size) {
            return new MyParcel[size];
        }
    };


    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(parcel_string);
        dest.writeTypedList(my_url);
    }
}

MyUrl.class

public class MyUrl implements Parcelable, Serializable{
    public String name = null;
    public String content = null;

    public MyUrl() {
    }

    public MyUrl(Parcel in){
        name = in.readString();
        content = in.readString();
    }

    public static final Parcelable.Creator<MyUrl> CREATOR = new Parcelable.Creator<MyUrl>(){
        @Override
        public MyUrl createFromParcel(Parcel in) {
            return new MyUrl(in);
        }

        @Override
        public MyUrl[] newArray(int size) {
            return new MyUrl[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(content);
    }
}

这是我的 StackTrace。

03-07 11:17:54.437 5150-5150/? E/Parcel: Class not found when unmarshalling: com.MyParcel
                                         java.lang.ClassNotFoundException: com.MyParcel
                                             at java.lang.Class.classForName(Native Method)
                                             at java.lang.Class.forName(Class.java:400)
                                             at android.os.Parcel.readParcelableCreator(Parcel.java:2507)
                                             at android.os.Parcel.readParcelable(Parcel.java:2461)
                                             at android.os.Parcel.readValue(Parcel.java:2364)
                                             at android.os.Parcel.readArrayMapInternal(Parcel.java:2717)
                                             at android.os.BaseBundle.unparcel(BaseBundle.java:269)
                                             at android.os.BaseBundle.getString(BaseBundle.java:992)
                                             at android.content.Intent.getStringExtra(Intent.java:6211)
                                             at com.MyTest.onCreate(MyTest.java:556)
                                             at android.app.Activity.performCreate(Activity.java:6664)
                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                             at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                             at android.os.Looper.loop(Looper.java:154)
                                             at android.app.ActivityThread.main(ActivityThread.java:6077)
                                             at java.lang.reflect.Method.invoke(Native Method)
                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                          Caused by: java.lang.ClassNotFoundException: com.MyParcel
                                             at java.lang.Class.classForName(Native Method)
                                             at java.lang.BootClassLoader.findClass(ClassLoader.java:1346)
                                             at java.lang.BootClassLoader.loadClass(ClassLoader.java:1406)
                                             at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                                             at java.lang.Class.classForName(Native Method) 
                                             at java.lang.Class.forName(Class.java:400) 
                                             at android.os.Parcel.readParcelableCreator(Parcel.java:2507) 
                                             at android.os.Parcel.readParcelable(Parcel.java:2461) 
                                             at android.os.Parcel.readValue(Parcel.java:2364) 
                                             at android.os.Parcel.readArrayMapInternal(Parcel.java:2717) 
                                             at android.os.BaseBundle.unparcel(BaseBundle.java:269) 
                                             at android.os.BaseBundle.getString(BaseBundle.java:992) 
                                             at android.content.Intent.getStringExtra(Intent.java:6211) 
                                             at com.MyTest.onCreate(MyTest.java:556) 
                                             at android.app.Activity.performCreate(Activity.java:6664) 
                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                                             at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                                             at android.os.Handler.dispatchMessage(Handler.java:102) 
                                             at android.os.Looper.loop(Looper.java:154) 
                                             at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                             at java.lang.reflect.Method.invoke(Native Method) 
                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
                                          Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
03-07 11:17:54.437 5150-5150/? D/AndroidRuntime: Shutting down VM
03-07 11:17:54.438 5150-5150/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com, PID: 5150
                                                 java.lang.RuntimeException: Unable to start activity ComponentInfo{com/com.MyTest}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.MyParcel
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                     at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                     at android.os.Looper.loop(Looper.java:154)
                                                     at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                  Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.MyParcel
                                                     at android.os.Parcel.readParcelableCreator(Parcel.java:2535)
                                                     at android.os.Parcel.readParcelable(Parcel.java:2461)
                                                     at android.os.Parcel.readValue(Parcel.java:2364)
                                                     at android.os.Parcel.readArrayMapInternal(Parcel.java:2717)
                                                     at android.os.BaseBundle.unparcel(BaseBundle.java:269)
                                                     at android.os.BaseBundle.getString(BaseBundle.java:992)
                                                     at android.content.Intent.getStringExtra(Intent.java:6211)
                                                     at com.MyTest.onCreate(MyTest.java:556)
                                                     at android.app.Activity.performCreate(Activity.java:6664)
                                                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                                                     at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                     at android.os.Looper.loop(Looper.java:154) 
                                                     at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                     at java.lang.reflect.Method.invoke(Native Method) 
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
4

0 回答 0