gpt4 book ai didi

java - 包裹 android.os.Parcel@72a6e36 : Unmarshalling unknown type code 2131365270 at offset 500

转载 作者:行者123 更新时间:2023-12-04 15:06:00 29 4
gpt4 key购买 nike

我遇到了与其他 20 个主题几乎相同的问题,它们指向 RuntimeException: Parcel android.os.Parcel@72a6e36: Unmarshalling unknown type code,但是偏移量不同 (500) :

Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@72a6e36: Unmarshalling unknown type code 2131365270 at offset 500
at android.os.Parcel.readValue(Parcel.java:2443)
at android.os.Parcel.readSparseArrayInternal(Parcel.java:2798)
at android.os.Parcel.readSparseArray(Parcel.java:2067)
at android.os.Parcel.readValue(Parcel.java:2421)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2717)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:910)
at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2129)
at android.app.Activity.onRestoreInstanceState(Activity.java:1047)
at android.app.Activity.performRestoreInstanceState(Activity.java:1002)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1174)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)
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)

不过,这些话题并没有给我解决我的问题。

在将 2 个类从 Java 转换为 Kotlin 后,我的问题开始出现,它们继承自 ViewGroupView,并且仅在应用程序的混淆版本中出现。
我的混淆器配置有一条规则:

-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}

原来不是这样的。这个问题很难被发现。

最佳答案

事实证明,它连接到 Parcelable CREATOR 代码。将类转换为 Kotlin 后,转换器是这样进行的:

companion object {
val CREATOR: Parcelable.Creator<SavedState> = object : Parcelable.Creator<SavedState> {
override fun createFromParcel(inParcel: Parcel): SavedState? {
return SavedState(inParcel)
}

override fun newArray(size: Int): Array<SavedState?> {
return arrayOfNulls(size)
}
}
}

长话短说,我在项目上运行 lint(来自 gradle tasks),它给了我正确的答案,代码中有一行:

Error: Field should be annotated with @JvmField [ParcelCreator]
val CREATOR: Parcelable.Creator<SavedState> = object : Parcelable.Creator<SavedState> {

所以总而言之,CREATOR 字段应该用 @JvmField 注释并且看起来像这样:

companion object {
@JvmField
val CREATOR: Parcelable.Creator<SavedState> = object : Parcelable.Creator<SavedState> {
override fun createFromParcel(inParcel: Parcel): SavedState? {
return SavedState(inParcel)
}

override fun newArray(size: Int): Array<SavedState?> {
return arrayOfNulls(size)
}
}
}

这解决了我的问题。堆栈溢出上没有线程提到 lint,所以如果您遇到困难并且没有尝试过 lint,也许这会有所帮助。

关于java - 包裹 android.os.Parcel@72a6e36 : Unmarshalling unknown type code 2131365270 at offset 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66093245/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com