android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator错误解决

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangmingbao2016/article/details/55046088

错误LOG:

E/AndroidRuntime(14491): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.skyworth.system_monitor/com.skyworth.system_monitor.AppDetils}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.skyworth.sm.entity.AppInfoEntity
E/AndroidRuntime(14491):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
E/AndroidRuntime(14491):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
E/AndroidRuntime(14491):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
E/AndroidRuntime(14491):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
E/AndroidRuntime(14491):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(14491):    at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(14491):    at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime(14491):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(14491):    at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(14491):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:937)
E/AndroidRuntime(14491):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753)
E/AndroidRuntime(14491):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(14491): Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.skyworth.sm.entity.AppInfoEntity
E/AndroidRuntime(14491):    at android.os.Parcel.readParcelableCreator(Parcel.java:2156)
E/AndroidRuntime(14491):    at android.os.Parcel.readParcelable(Parcel.java:2097)
E/AndroidRuntime(14491):    at android.os.Parcel.readValue(Parcel.java:2013)
E/AndroidRuntime(14491):    at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
E/AndroidRuntime(14491):    at android.os.Bundle.unparcel(Bundle.java:249)
E/AndroidRuntime(14491):    at android.os.Bundle.getParcelable(Bundle.java:1206)
E/AndroidRuntime(14491):    at android.content.Intent.getParcelableExtra(Intent.java:4652)
E/AndroidRuntime(14491):    at com.skyworth.system_monitor.AppDetils.onCreate(AppDetils.java:34)
E/AndroidRuntime(14491):    at android.app.Activity.performCreate(Activity.java:5232)
E/AndroidRuntime(14491):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
E/AndroidRuntime(14491):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
E/AndroidRuntime(14491):    ... 11 more
W/ActivityManager( 1549):   Force finishing activity com.skyworth.system_monitor/.AppDetils
W/ActivityManager( 1549):   Force finishing activity com.skyworth.system_monitor/.App_Manage

产生的原因:

第一种可能:没有创建CREATOR方法,使用Parcelable实现序列化时,除了序列化的类实现Parcelable接口并实现其抽象方法外还需要创建CREATOR方法,具体请看下面的源代码。
第二种可能:创建CREATOR方法名为CREATOR,但是我们写成了Creator或者是别的方法名,方法名必须为CREATOR,我在方法名上被坑惨了。

package com.skyworth.sm.entity;


import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by zhangmingbao on 17-2-7.
 */

public class AppInfoEntity implements Parcelable{
    private Bitmap icon = null;
    private String pkgName =null;
    private String appLabel = null;
    private String appSize = null;
    private String cacheSize = null;
    private String dataSize = null;
    private String codeSize = null;
    //default:the application is not running
    private int isRunning = 0;
    //default:the application is not sysApp
    private int isSysApp = 0;

    @Override
    public String toString() {
        return appLabel+":\n"+"  AppInfoEntity{" +
                "icon=" + icon +
                ", pkgName='" + pkgName + '\'' +
                ", appLabel='" + appLabel + '\'' +
                ", appSize='" + appSize + '\'' +
                ", cacheSize='" + cacheSize + '\'' +
                ", dataSize='" + dataSize + '\'' +
                ", codeSize='" + codeSize + '\'' +
                ", isRunning=" + isRunning +
                ", isSysApp=" + isSysApp +
                '}'+ "\n";
    }

    public String getAppLabel() {
        return appLabel;
    }

    public void setAppLabel(String appLabel) {
        this.appLabel = appLabel;
    }


    public String getCacheSize() {
        return cacheSize;
    }

    public void setCacheSize(String cacheSize) {
        this.cacheSize = cacheSize;
    }

    public String getDataSize() {
        return dataSize;
    }

    public void setDataSize(String dataSize) {
        this.dataSize = dataSize;
    }

    public String getCodeSize() {
        return codeSize;
    }

    public void setCodeSize(String codeSize) {
        this.codeSize = codeSize;
    }

    public int getIsRunning() {
        return isRunning;
    }

    public void setIsRunning(int isRunning) {
        this.isRunning = isRunning;
    }


    public Bitmap getIcon() {
        return icon;
    }

    public void setIcon(Bitmap icon) {
        this.icon = icon;
    }

    public String getPkgName() {
        return pkgName;
    }

    public void setPkgName(String pkgName) {
        this.pkgName = pkgName;
    }

    public String getAppSize() {
        return appSize;
    }

    public void setAppSize(String appSize) {
        this.appSize = appSize;
    }

    public int getIsSysApp() {
        return isSysApp;
    }

    public void setIsSysApp(int isSysApp) {
        this.isSysApp = isSysApp;
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        // TODO Auto-generated method stub
        out.writeParcelable(icon, flags);
        out.writeString(appLabel);
        out.writeString(appSize);
        out.writeString(cacheSize);
        out.writeString(dataSize);
        out.writeString(codeSize);
        out.writeInt(isRunning);
        out.writeInt(isSysApp);
        out.writeString(pkgName);
    }
//错误代码:××××××××××××××××××××××××××××××××××××××××××××××××××××××××
//public static final Parcelable.Creator<AppInfoEntity> Creator = new Creator<AppInfoEntity>() //此为CREATOR方法,此方法名必须为CREATOR,不能为Creator
//{
//  @Override
//  public AppInfoEntity createFromParcel(Parcel data) {
        // TODO Auto-generated method stub
//      AppInfoEntity ai = new AppInfoEntity();
//      ai.setIcon((Bitmap) data.readParcelable(Bitmap.class.getClassLoader()));
//      ai.setAppLabel(data.readString());
//      ai.setAppSize(data.readString());
//      ai.setCacheSize(data.readString());
//      ai.setDataSize(data.readString());
//      ai.setCodeSize(data.readString());
//      ai.setIsRunning(data.readInt());
//      ai.setIsSysApp(data.readInt());
//      ai.setPkgName(data.readString());
//      return ai;
//  }

//  @Override
//  public AppInfoEntity[] newArray(int arg0) {
//      // TODO Auto-generated method stub
//      return new AppInfoEntity[arg0];
//  }
//};
//错误代码:××××××××××××××××××××××××××××××××××××××××××××××××××××××××
//正确代码:××××××××××××××××××××××××××××××××××××××××××××××××××××××××
public static final Parcelable.Creator<AppInfoEntity> CREATOR = new Creator<AppInfoEntity>()  //此为CREATOR方法,此方法名必须为CREATOR,不能为Creator
{

    @Override
    public AppInfoEntity createFromParcel(Parcel data) {
        // TODO Auto-generated method stub
        AppInfoEntity ai = new AppInfoEntity();
//      ai.setIcon((Bitmap) data.readParcelable(Bitmap.class.getClassLoader()));
        ai.setAppLabel(data.readString());
        ai.setAppSize(data.readString());
        ai.setCacheSize(data.readString());
        ai.setDataSize(data.readString());
        ai.setCodeSize(data.readString());
        ai.setIsRunning(data.readInt());
        ai.setIsSysApp(data.readInt());
        ai.setPkgName(data.readString());
        return ai;
    }

    @Override
    public AppInfoEntity[] newArray(int arg0) {
        // TODO Auto-generated method stub
        return new AppInfoEntity[arg0];
    }

};
//正确代码:××××××××××××××××××××××××××××××××××××××××××××××××××××××××


}

猜你喜欢

转载自blog.csdn.net/zhangmingbao2016/article/details/55046088
今日推荐