@SerializedName("profileName")
private String profileName;
@SerializedName("paused")
private boolean isPaused;
@SerializedName("numberOfDevices")
private int numberOfDevices;
private boolean isSelected;
public Profile(String profileName, Boolean isPaused, int numberOfDevices) {
this.profileName = profileName;
this.isPaused = isPaused;
this.numberOfDevices = numberOfDevices;
}
protected Profile(Parcel in) {
profileName = in.readString();
isPaused = (boolean) in.readValue(boolean.class.getClassLoader());
isSelected = (boolean) in.readValue(boolean.class.getClassLoader());
numberOfDevices = in.readInt();
}
因此,在上面的代码中,我不知道为什么要在isSelected而不是isPaused上获得classCastExcpetion的原因。两者都具有相同的数据类型,并且以类似的方式使用。尝试搜索它仍然无法理解该问题。下面是它的日志。
java.lang.IllegalStateException: Bundle length is not aligned by 4: 9
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3447)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3594)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2146)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7762)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
Caused by: java.lang.IllegalStateException: Bundle length is not aligned by 4: 9
at android.os.BaseBundle.readFromParcelInner(BaseBundle.java:1615)
at android.os.BaseBundle.<init>(BaseBundle.java:143)
at android.os.Bundle.<init>(Bundle.java:95)
at android.os.Parcel.readBundle(Parcel.java:2301)
at android.os.Parcel.readValue(Parcel.java:2946)
at models.Profile.<init>(Profile.java:27)
at models.Profile$1.createFromParcel(Profile.java:34)
at models.Profile$1.createFromParcel(Profile.java:31)
at android.os.Parcel.readParcelable(Parcel.java:2990)
at android.os.Parcel.readValue(Parcel.java:2883)
at android.os.Parcel.readArrayMapInternal(Parcel.java:3261)
at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
at android.os.BaseBundle.unparcel(BaseBundle.java:236)
at android.os.Bundle.getParcelable(Bundle.java:951)
而奇怪的是,我正在将其用于回收者视图。如果我在“回收者”视图中单击第一个项目,它将显示以下IllegalStateException;如果我单击任何其他项目,我将得到ClassCastException,如下所示
java.lang.Short cannot be cast to java.lang.Boolean
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3447)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3594)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2146)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7762)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
Caused by: java.lang.ClassCastException: java.lang.Short cannot be cast to java.lang.Boolean
at com.centurylink.ctl_droid_wrap.models.Profile.<init>(Profile.java:27)
at com.centurylink.ctl_droid_wrap.models.Profile$1.createFromParcel(Profile.java:34)
at com.centurylink.ctl_droid_wrap.models.Profile$1.createFromParcel(Profile.java:31)
at android.os.Parcel.readParcelable(Parcel.java:2990)
at android.os.Parcel.readValue(Parcel.java:2883)
at android.os.Parcel.readArrayMapInternal(Parcel.java:3261)
at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
at android.os.BaseBundle.unparcel(BaseBundle.java:236)
at android.os.Bundle.getParcelable(Bundle.java:951)
您没有isSelected的@SerializedName。它将读取numberOfDevices的值并分配给isSelected并导致异常。为isSelected添加SerializedName,问题将消失。
protected Profile(Parcel in) {
profileName = in.readString();
isPaused = in.readByte() != 0;
numberOfDevices = in.readInt();
isSelected = in.readByte() != 0;
}
我只是替换为上面的代码,它解决了这个问题。上课有个问题。