【问题标题】:findNavController().navigate() get invokeSuspend and Fragment$InstantiationException calling Fragment constructor caused an exception errorfindNavController().navigate() 获取invokeSuspend 和Fragment$InstantiationException 调用Fragment 构造函数导致异常错误
【发布时间】:2022-01-24 21:16:56
【问题描述】:

logcat 错误:在 findNavController().navigate(navDirections) 调用挂起

viewLifecycleOwner.lifecycleScope.launch {
            viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
                viewModel.goodInfoStateFlow.collectLatest { goodInfoState ->
                    when (goodInfoState) {
                        is GoodInfoState.Success -> {

                            val goodInfo = goodInfoState.goodInfo

                            Log.d(TAG, "goodInfo: $goodInfo")

                                val navDirections =
                            CargoFragmentDirections.actionCargoFragmentToGoodInfoJourneysFragment(
                                goodInfo
                            )
                        findNavController().navigate(navDirections)

                        }
                        is GoodInfoState.Error -> {
                            AlertDialog.Builder(requireContext())
                                .setMessage(goodInfoState.message)
                                .setNegativeButton(
                                    "Cancel"
                                ) { dialogInterface, _ ->
                                    dialogInterface.dismiss()
                                }
                        }
//                        GoodInfoState.Loading -> TODO()
                    }
                }
            }
        }

错误信息: androidx.fragment.app.Fragment$InstantiationException:无法实例化片段.GoodInfoJourneysFragment:调用片段构造函数导致异常 在 androidx.fragment.app.Fragment.instantiate(Fragment.java:633) 在 androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) 在 androidx.fragment.app.FragmentManager$2.instantiate(FragmentManager.java:448) 在 androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132) 在 androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162) 在 androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58) 在 androidx.navigation.NavController.navigate(NavController.java:1066) 在 androidx.navigation.NavController.navigate(NavController.java:944) 在 androidx.navigation.NavController.navigate(NavController.java:877) 在 androidx.navigation.NavController.navigate(NavController.java:863) 在 androidx.navigation.NavController.navigate(NavController.java:851) 在 $onViewCreated$1$1$1.invokeSuspend(CargoFragment.kt:97)

java.lang.NullPointerException 在 fragment.GoodInfoJourneysFragment.(GoodInfoJourneysFragment.kt:17)

【问题讨论】:

  • GoodInfoJourneysFragment: calling Fragment constructor caused an exception。那么有什么例外呢?您没有包含整个堆栈跟踪。
  • @ianhanniballake GoodInfoJourneysFragment.kt 只是错误-> private val binding = _binding!!在 fragment.GoodInfoJourneysFragment.(GoodInfoJourneysFragment.kt:17) 处出现 java.lang.NullPointerException

标签: android kotlin android-fragments navigation kotlin-coroutines


【解决方案1】:

在我更改为 -> private val binding get() =

并解决了这个问题。

产地:

class CargoFragment : Fragment() {

    private var _binding: FragmentCargoBinding? = null
    private val binding = _binding!!
}

修改后:

class CargoFragment : Fragment() {

    private var _binding: FragmentCargoBinding? = null
    private val binding get() = _binding!!
}

【讨论】:

    【解决方案2】:

    请在第 17 行检查您的 GoodInfoJourneysFragment 代码。异常堆栈跟踪中的行

    java.lang.NullPointerException at fragment.GoodInfoJourneysFragment.(GoodInfoJourneysFragment.kt:17)

    说你有一些你试图使用的对象,但在使用之前它没有被实例化。

    【讨论】:

      【解决方案3】:

      添加

       implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
      implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
      

      试试

      【讨论】:

        猜你喜欢
        • 2020-09-22
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        • 2017-07-24
        相关资源
        最近更新 更多