Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-带有可序列化回调的DialogFragment在片段销毁时崩溃_Java_Android_Android Layout_Kotlin_Android Fragments - Fatal编程技术网

Java Android-带有可序列化回调的DialogFragment在片段销毁时崩溃

Java Android-带有可序列化回调的DialogFragment在片段销毁时崩溃,java,android,android-layout,kotlin,android-fragments,Java,Android,Android Layout,Kotlin,Android Fragments,我的片段有一个对话框片段,为了在单击对话框按钮时接收回调,我将一个可序列化的接口传递给它的参数 问题是,如果用户切换到android主屏幕,每当显示对话框时,应用程序就会崩溃 注意:根据我的日志,销毁顺序从主片段开始,以对话框片段结束。 初始化对话框片段的代码: 可序列化回调接口: StackTrace 使用Parcelable而不是Serializable解决了这个问题。然而,我仍然得到一个IllegalArgumentException异常,在导航时说:“当前操作/目标无法从当前目标中

我的片段有一个对话框片段,为了在单击对话框按钮时接收回调,我将一个可序列化的接口传递给它的参数

问题是,如果用户切换到android主屏幕,每当显示对话框时,应用程序就会崩溃

注意:根据我的日志,销毁顺序从主片段开始,以对话框片段结束。

初始化对话框片段的代码:



可序列化回调接口:



StackTrace


使用Parcelable而不是Serializable解决了这个问题。然而,我仍然得到一个IllegalArgumentException异常,在导航时说:“当前操作/目标无法从当前目标中找到”。
但它不会使应用程序崩溃或引起任何副作用(至少在我的应用程序中,我建议您运行测试用例)

注意:以防我用try-catch包住了块

初始化对话框片段的代码:

包裹回拨接口:

       Navigation.findNavController(binding.root).navigate(GameFragmentDirections.actionGameFragmentToPauseDialogFragment(
                object : PauseDialogFragment.ResumeGameListener
                {
                    override fun onResume()
                    {
                        isGamePaused = false
                        onStartGame(_screenSizePairXY)
                    }
                }))
interface ResumeGameListener : Serializable
{
    fun onResume()
}
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = ui.game.GameFragment$onGameOver$1)
    at android.os.Parcel.writeSerializable(Parcel.java:1714)
    at android.os.Parcel.writeValue(Parcel.java:1662)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:875)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1579)
    at android.os.Bundle.writeToParcel(Bundle.java:1233)
    at android.os.Parcel.writeBundle(Parcel.java:915)
    at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:125)
    at android.os.Parcel.writeTypedObject(Parcel.java:1516)
    at android.os.Parcel.writeTypedList(Parcel.java:1395)
    at android.os.Parcel.writeTypedList(Parcel.java:1380)
    at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51)
    at android.os.Parcel.writeParcelable(Parcel.java:1683)
    at android.os.Parcel.writeValue(Parcel.java:1589)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:875)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1579)
    at android.os.Bundle.writeToParcel(Bundle.java:1233)
    at android.os.Parcel.writeBundle(Parcel.java:915)
    at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:127)
    at android.os.Parcel.writeTypedObject(Parcel.java:1516)
    at android.os.Parcel.writeTypedList(Parcel.java:1395)
    at android.os.Parcel.writeTypedList(Parcel.java:1380)
    at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51)
    at android.os.Parcel.writeParcelable(Parcel.java:1683)
    at android.os.Parcel.writeValue(Parcel.java:1589)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:875)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1579)
    at android.os.Bundle.writeToParcel(Bundle.java:1233)
    at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4008)
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6762)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: java.io.NotSerializableException: com.developerkurt.ghosky.ui.game.GameFragment
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
    at android.os.Parcel.writeSerializable(Parcel.java:1709)
    at android.os.Parcel.writeValue(Parcel.java:1662) 
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:875) 
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1579) 
    at android.os.Bundle.writeToParcel(Bundle.java:1233) 
    at android.os.Parcel.writeBundle(Parcel.java:915) 
    at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:125) 
    at android.os.Parcel.writeTypedObject(Parcel.java:1516) 
    at android.os.Parcel.writeTypedList(Parcel.java:1395) 
    at android.os.Parcel.writeTypedList(Parcel.java:1380) 
    at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51) 
    at android.os.Parcel.writeParcelable(Parcel.java:1683) 
    at android.os.Parcel.writeValue(Parcel.java:1589) 
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:875) 
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1579) 
    at android.os.Bundle.writeToParcel(Bundle.java:1233) 
    at android.os.Parcel.writeBundle(Parcel.java:915) 
    at androidx.fragment.app.FragmentState.writeToParcel(FragmentState.java:127) 
    at android.os.Parcel.writeTypedObject(Parcel.java:1516) 
    at android.os.Parcel.writeTypedList(Parcel.java:1395) 
    at android.os.Parcel.writeTypedList(Parcel.java:1380) 
    at androidx.fragment.app.FragmentManagerState.writeToParcel(FragmentManagerState.java:51) 
    at android.os.Parcel.writeParcelable(Parcel.java:1683) 
    at android.os.Parcel.writeValue(Parcel.java:1589) 
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:875) 
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1579) 
    at android.os.Bundle.writeToParcel(Bundle.java:1233) 
    at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4008) 
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144) 
    at android.os.Handler.handleCallback(Handler.java:873) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:6762) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    
   try
        {
            Navigation.findNavController(binding.root).navigate(GameFragmentDirections.actionGameFragmentToPauseDialogFragment(
                    object : PauseDialogFragment.ResumeGameListener
                    {
                        override fun onResume()
                        {
                            isGamePaused = false
                            onStartGame(_screenSizePairXY)
                        }

                        override fun writeToParcel(p0: Parcel?, p1: Int)
                        {
                        }

                        override fun describeContents(): Int = 0
                    }))

        }
        catch (e: Exception)
        {
            Timber.w(e.fillInStackTrace())
        }
 interface ResumeGameListener : Parcelable
    {
        fun onResume()
    }