gpt4 book ai didi

android - 电子/包裹 : Class not found when unmarshalling class with @Parcelize

转载 作者:行者123 更新时间:2023-12-02 13:44:23 29 4
gpt4 key购买 nike

所以我得到了 Retrofit API + Gson 作为转换器,我有 parcelable 类可以传递给各种 Activity ......

@Parcelize
data class GenericList<T>(
@SerializedName("data") var data: @RawValue List<T>
) : Parcelable

这是一个通用列表类,可与以下内容打包:
abstract class AbsPlot : Parcelable {

abstract var rating: Map<String, Rating>?
abstract var plots: GenericList<Plot>?
....
abstract var languages: GenericList<Language>?

}

@Parcelize
data class Plot(
@SerializedName("rating") override var rating: Map<String, Rating>?,
@SerializedName("plots") override var plots: GenericList<Plot>?,
....
@SerializedName("languages") override var languages: GenericList<Language>?,
) : AbsPlot()

一旦我想取消包裹这些类(class),它就会崩溃
引起:android.os.BadParcelableException: 解码时 ClassNotFoundException

有什么办法可以解决?

最佳答案

问题可能是 @RawValue注解。

从它的javadoc:

Write the corresponding property value with [android.os.Parcel.writeValue]. Serialization may fail at runtime, depending on actual property value type.



序列化泛型类型 T 可能会遇到一些问题。如果没有更多关于找不到哪个类的详细信息,我只能猜到这些。

我建议您避免使用该注释并使用编译器泛型选项,如下所示:
@Parcelize
data class GenericList<T : Parcelable>(
@SerializedName("…") val data: List<T>
) : Parcelable

如果可能的话,我还建议制作 AbsPlot一个接口(interface)并标记为 Parcelable接口(interface)的每个实现。

让我怀疑的另一件事是检查类 RatingsParcelable .

关于android - 电子/包裹 : Class not found when unmarshalling class with @Parcelize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60289647/

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