当我点击最近的应用程序时,Android应用程序崩溃

问题描述 投票:0回答:1

我用的是 HomeActivity 其中有一个导航抽屉。这个活动有多个标签,它使用碎片来显示不同的列表。在每个片段上,我使用了 FragmentDialog 来显示自定义过滤器对话框。

当我点击过滤器菜单项时,这个自定义对话框就会弹出。如果我在对话框在顶部时点击最近的项目按钮,那么应用程序就会崩溃,留下这个日志。

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) 
android android-fragments parcelable
1个回答
0
投票

你正在尝试序列化 EmployeeListFragment,可能 onPause,而它却抱怨说。

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

所以你处理实例状态的方式有问题,例如,它还列出了。

FragmentState.writeToParcel(FragmentState.java:169)

Fragment &amp。FragmentDialog 生命周期。


a) 认为你可以使用 transient 关键字,将其排除在序列化之外。

public transient AppCompatButton mButton = null;

b) 或者添加 implements Serializable 到任何需要序列化的东西,例如 public class MyButton implements Serializable (将一个序列化的 AppCompatButton).

© www.soinside.com 2019 - 2024. All rights reserved.