0

I'm using HomeActivity which has a navigation drawer. This activity has multiple tabs which is using fragments to show different lists. On each fragment, I used FragmentDialog to show custom filter dialogs.

When I click the filter menu item, this custom dialog pops up. If I tap the recent items button when the dialog is on top then the app crashes leaving this log.

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.myapplication.fragments.-$$Lambda$EmployeeListFragment$2gfw7BDAN9Jtbj71yfwTPA0wy_4)
    at android.os.Parcel.writeSerializable(Parcel.java:1822)
    at android.os.Parcel.writeValue(Parcel.java:1770)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542)
    at android.os.Bundle.writeToParcel(Bundle.java:1232)
    at android.os.Parcel.writeBundle(Parcel.java:878)
    at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:167)
    at android.os.Parcel.writeTypedList(Parcel.java:1354)
    at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51)
    at android.os.Parcel.writeParcelable(Parcel.java:1791)
    at android.os.Parcel.writeValue(Parcel.java:1697)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542)
    at android.os.Bundle.writeToParcel(Bundle.java:1232)
    at android.os.Parcel.writeBundle(Parcel.java:878)
    at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:169)
    at android.os.Parcel.writeTypedList(Parcel.java:1354)
    at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51)
    at android.os.Parcel.writeParcelable(Parcel.java:1791)
    at android.os.Parcel.writeValue(Parcel.java:1697)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542)
    at android.os.Bundle.writeToParcel(Bundle.java:1232)
    at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4604)
    at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3934)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.io.NotSerializableException: androidx.appcompat.widget.AppCompatButton
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1233)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1597)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1558)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1481)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1227)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1597)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1558)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1481)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1227)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1597)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1558)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1481)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1227)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
    at android.os.Parcel.writeSerializable(Parcel.java:1817)
    at android.os.Parcel.writeValue(Parcel.java:1770) 
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:838) 
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542) 
    at android.os.Bundle.writeToParcel(Bundle.java:1232) 
    at android.os.Parcel.writeBundle(Parcel.java:878) 
    at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:167) 
    at android.os.Parcel.writeTypedList(Parcel.java:1354) 
    at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51) 
    at android.os.Parcel.writeParcelable(Parcel.java:1791) 
    at android.os.Parcel.writeValue(Parcel.java:1697) 
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:838) 
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542) 
    at android.os.Bundle.writeToParcel(Bundle.java:1232) 
    at android.os.Parcel.writeBundle(Parcel.java:878) 
    at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:169) 
    at android.os.Parcel.writeTypedList(Parcel.java:1354) 
    at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51) 
    at android.os.Parcel.writeParcelable(Parcel.java:1791) 
    at android.os.Parcel.writeValue(Parcel.java:1697) 
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:838) 
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542) 
    at android.os.Bundle.writeToParcel(Bundle.java:1232) 
    at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4604) 
    at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3934) 
    at android.os.Handler.handleCallback(Handler.java:790) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
Martin Zeitler
  • 1
  • 19
  • 155
  • 216
Manoj
  • 35
  • 7
  • Why would you want to serialize AppCompatButton – ror Jun 02 '20 at 18:39
  • Can you post the code as well? – Purushotam Kumar Jun 03 '20 at 08:15
  • This can help you https://stackoverflow.com/questions/40839274/android-application-is-crashing-when-moving-to-background – Bek Jun 03 '20 at 08:15
  • @Bek this "answer" there is not really a good answer, because the instance state will be lost... See [How to create a Minimal, Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example), because there is no code. – Martin Zeitler Jun 03 '20 at 09:03
  • It even seems duplicate: [Parcelable encountered IOException writing serializable object getactivity()](https://stackoverflow.com/questions/23142893/parcelable-encountered-ioexception-writing-serializable-object-getactivity) – Martin Zeitler Jun 03 '20 at 09:12

1 Answers1

0

You are trying to serialize EmployeeListFragment, likely onPause, while it complains that:

java.io.NotSerializableException: androidx.appcompat.widget.AppCompatButton

So there is something wrong with the way you handle the instance state; eg. it also lists:

FragmentState.writeToParcel(FragmentState.java:169)

See Fragment & FragmentDialog life-cycle.


a) Think you could use transient key-word to exclude it from serialization:

public transient AppCompatButton mButton = null;

b) Or add implements Serializable to whatever needs to be serialized; eg. public class MyButton implements Serializable (it might be non-sense to serialize an AppCompatButton).

Martin Zeitler
  • 1
  • 19
  • 155
  • 216