版权声明:本文为博主原创文章,未经博主允许不得转载。 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];
}
};
//正确代码:××××××××××××××××××××××××××××××××××××××××××××××××××××××××
}