【发布时间】:2019-08-21 12:37:46
【问题描述】:
我将模型列表从一个片段 A 传递到另一个片段 B,当我按下片段 B 上的最近应用按钮时,它崩溃了。
data class CategoryModel(
@SerializedName("id")
val id : Int,
@SerializedName("name")
val categoryName : String,
var isSelected : Boolean,
@SerializedName("image")
val imageUrl : String,
var isOpened: Boolean = false,
@SerializedName("service")
val services : MutableList<ServiceModel>,
var selectedServiceListAdapter: SelectedSeerviceListRecyclerAdapter? = null) : Serializable
这是片段A:
列表是
val localCategoryList: MutableList<CategoryModel> = arrayListOf()
我正在通过以下列表:
val argument = bundleOf("list" to localCategoryList)
findNavController(this).navigate(R.id.action_categoryFragment_to_serviceListFragment, argument)
在片段 B 中:
categoryList = arguments?.get("list") as MutableList<CategoryModel>
下面是堆栈跟踪
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.xxx.xxx.xxx.model.CategoryModel)
at android.os.Parcel.writeSerializable(Parcel.java:1394)
at android.os.Bundle.writeToParcel(Bundle.java:1034)
at android.os.Parcel.writeBundle(Parcel.java:669)
at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:167)
at android.os.Parcel.writeTypedList(Parcel.java:1112)
at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51)
androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51)
at android.os.Parcel.writeBundle(Parcel.java:669)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3270)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.io.NotSerializableException: com.xxxx.xxxx.xxxx.view.activities.ProviderDetailsActivity
at
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
at android.os.Parcel.writeSerializable(Parcel.java:1389)
at android.os.Parcel.writeValue(Parcel.java:1341)
at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:169)
at android.os.Parcel.writeTypedList(Parcel.java:1112)
at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51)
at android.os.Parcel.writeParcelable(Parcel.java:1363)
at android.os.Parcel.writeValue(Parcel.java:1268)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:644)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)
at android.os.Bundle.writeToParcel(Bundle.java:1034)
at android.os.Parcel.writeBundle(Parcel.java:669)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3270)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4385)
at android.os.Handler.handleCallback(Handler.java:739)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
【问题讨论】:
-
是
ServiceModelSerializable?请提供完整的堆栈跟踪。 -
@MikeM。你能检查一下跟踪和ServiceModel模型是可序列化的
-
这是我的服务模型:@SerializedName("id") val id : Int, @SerializedName("name") val serviceName: String, var isSelected: Boolean, var isCustomized: Boolean = false, var timeTaken: String, var price: String = "0", @SerializedName("min_price") val minPrice: String, @SerializedName("max_price") val maxPrice: String, var serviceNameValueList: MutableList
= arrayListOf(), var serviceNameAndValueRecyclerAdapter: ServiceNameAndValueRecyclerAdapter? ) : 可序列化 -
它正在尝试序列化
ProviderDetailsActivity。我不确定 Kotlin 如何处理序列化,但看起来你有几个RecyclerView.Adapters 实现了Serializable,而那些可能有Activity的字段,你不能序列化。我不确定为什么那些Adapters 实现Serializable,但你不应该尝试序列化它们;只是数据。
标签: android notserializableexception