Android 正在isSelected上获取ClassCastException或IllegalStateException

Android 正在isSelected上获取ClassCastException或IllegalStateException,android,parcelable,Android,Parcelable,因此,在上面的代码中,我不知道为什么我在上获得ClassCastException是选中的,而不是在中获得的。两者都有相同的数据类型,并以类似的方式使用。尝试搜索它仍然无法理解问题。下面是它的日志 java.lang.IllegalStateException:包长度未按4:9对齐 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3447)上 位于android.app.ActivityThread.ha

因此,在上面的代码中,我不知道为什么我在上获得ClassCastException是选中的,而不是在中获得的。两者都有相同的数据类型,并以类似的方式使用。尝试搜索它仍然无法理解问题。下面是它的日志

java.lang.IllegalStateException:包长度未按4:9对齐
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3447)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3594)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2146)
位于android.os.Handler.dispatchMessage(Handler.java:107)
位于android.os.Looper.loop(Looper.java:237)
位于android.app.ActivityThread.main(ActivityThread.java:7762)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
原因:java.lang.IllegalStateException:包长度未按4:9对齐
位于android.os.BaseBundle.ReadFromParceliner(BaseBundle.java:1615)
位于android.os.BaseBundle。(BaseBundle.java:143)
位于android.os.Bundle(Bundle.java:95)
位于android.os.Parcel.readBundle(Parcel.java:2301)
位于android.os.Parcel.readValue(Parcel.java:2946)
在models.Profile.(Profile.java:27)
在models.Profile$1.createFromParcel(Profile.java:34)
在models.Profile$1.createFromParcel(Profile.java:31)
位于android.os.Parcel.readParcelable(Parcel.java:2990)
位于android.os.Parcel.readValue(Parcel.java:2883)
位于android.os.Parcel.ReadyArrayMapInternal(Parcel.java:3261)
在android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
位于android.os.BaseBundle.unparcel(BaseBundle.java:236)
位于android.os.Bundle.getParcelable(Bundle.java:951)
奇怪的是我用它来观察回收者。如果我点击recycler视图中的第一个项目,它会给出以下非法状态异常,如果我点击任何其他项目,我会得到ClassCastException,如下所示

java.lang.Short不能强制转换为java.lang.Boolean
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3447)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3594)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2146)
位于android.os.Handler.dispatchMessage(Handler.java:107)
位于android.os.Looper.loop(Looper.java:237)
位于android.app.ActivityThread.main(ActivityThread.java:7762)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
原因:java.lang.ClassCastException:java.lang.Short无法转换为java.lang.Boolean
位于com.centurylink.ctl_droid_wrap.models.Profile.(Profile.java:27)
位于com.centurylink.ctl_droid_wrap.models.Profile$1.createFromParcel(Profile.java:34)
位于com.centurylink.ctl_droid_wrap.models.Profile$1.createFromParcel(Profile.java:31)
位于android.os.Parcel.readParcelable(Parcel.java:2990)
位于android.os.Parcel.readValue(Parcel.java:2883)
位于android.os.Parcel.ReadyArrayMapInternal(Parcel.java:3261)
在android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
位于android.os.BaseBundle.unparcel(BaseBundle.java:236)
位于android.os.Bundle.getParcelable(Bundle.java:951)

您没有isSelected的@SerializedName。它将读取numberOfDevices的值并分配给isSelected并导致异常。为isSelected添加SerializedName,问题就会消失

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。我的意思是,这就是为什么它会出现异常,因为包裹没有它的信息,但您强制它读取值并将其分配给isSelected。你应该考虑使用瞬态注释。感谢检查我的代码,我发现我上面发布的问题是答案。
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)
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)
 protected Profile(Parcel in) {
    profileName = in.readString();
    isPaused = in.readByte() != 0;
    numberOfDevices = in.readInt();
    isSelected = in.readByte() != 0;
}