-1

I am passing a list of model from one fragment A to another fragment B, when when i press recent app button on fragment B it crashed.

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

and this is fragment A :

the list is

val localCategoryList: MutableList<CategoryModel> = arrayListOf()

and i am passing the list below :

val argument = bundleOf("list" to localCategoryList)

findNavController(this).navigate(R.id.action_categoryFragment_to_serviceListFragment, argument)

and in fragment B :

categoryList = arguments?.get("list") as MutableList<CategoryModel>

below are the stack trace

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) 
Rakesh kushwaha
  • 709
  • 1
  • 10
  • 22
  • Is `ServiceModel` `Serializable`? Please provide the complete stack trace. – Mike M. Aug 21 '19 at 12:40
  • @MikeM. Can u pls check the trace and ServiceModel Model is Serializable – Rakesh kushwaha Aug 21 '19 at 12:52
  • this is my service Model : @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? ) : Serializable – Rakesh kushwaha Aug 21 '19 at 12:53
  • Somewhere it's trying to serialize a `ProviderDetailsActivity`. I'm not exactly sure how Kotlin handles serialization, but it looks like you have a couple of `RecyclerView.Adapter`s implementing `Serializable`, and those possibly have fields for an `Activity`, which you cannot serialize. I'm not sure why those `Adapter`s implement `Serializable`, but you shouldn't be trying to serialize them; just the data. – Mike M. Aug 21 '19 at 13:47

1 Answers1

2

You need to parcelable data class like below example

Parcelize
data class WebViewTemplateParam(
    var type:FeedsType?,
    var placeholder: String = "",
    var message: String = "",
    var title: String? = "",
    var image: Int?= null):Parcelable
Anas Mehar
  • 2,739
  • 14
  • 25