Android 尝试在片段之间传递数据时出现空指针异常

Android 尝试在片段之间传递数据时出现空指针异常,android,kotlin,android-fragments,Android,Kotlin,Android Fragments,我试图通过主_活动在一个片段到另一个片段之间传递数据。 在这样做的时候,我可以看到它是有效的(多亏了Log.d(…),但是在我的值变为null之后,我得到了一个null指针异常 我的代码主要活动: class MainActivity : AppCompatActivity(), Communicator { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanc

我试图通过主_活动在一个片段到另一个片段之间传递数据。 在这样做的时候,我可以看到它是有效的(多亏了Log.d(…),但是在我的值变为null之后,我得到了一个null指针异常

我的代码主要活动:

class MainActivity : AppCompatActivity(), Communicator {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
        // Keyboard hidden when app start
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
    }

    override fun passDataComCategoryId(input: String) {
        val bundle = Bundle()
        bundle.putString("selectedCategoryId", input)

        val transaction = this.supportFragmentManager.beginTransaction()
        val frag2 = GameFragment()
        frag2.arguments = bundle
        transaction.replace(R.id.myNavHostFragment,frag2)
        transaction.commit()
    }
标题片段(片段1):

配子片段(片段2):

当我在数据传递后记录该值时,我看到了这一点(如果我没有捕捉到它,则会出现null异常):

编辑:空指针异常如下所示:

2021-01-16 01:13:36.921 7517-7517/be.adembacaj.kuizuv2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: be.adembacaj.kuizuv2, PID: 7517
    java.lang.NullPointerException
        at be.adembacaj.kuizuv2.GameFragment.onCreateView(GameFragment.kt:51)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:101)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7529)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

有人能告诉我吗?

如果您使用的是
NavHostFragment
,那么您永远不应该执行手动
FragmentTransaction
-删除您的整个
passDataComCategoryId
方法

相反,将您的包传递到
导航()


请把这张照片贴出来NullPointerException@ZainNullpointerException Added堆栈跟踪显示错误发生在GameFragment.kt的第51行,您似乎已经在上面切断了该行。但您可能正试图对不在当前布局中的视图使用合成视图引用。@Tenfour04第51行是:val selectedCategoryId:String?=参数?.getString(“selectedCategoryId”)似乎使用Nav架构组件。。为什么要手动执行该事务请注意,导航有一个名为的功能,该功能使该类型安全,因此,如果不传入所需的参数,就无法导航到您的
GameFragment
class GameFragment : Fragment() {

    /**
     * Lazily initialize our [GameViewModel].
     */
    private val viewModel: GameViewModel by lazy {
        ViewModelProvider(this).get(GameViewModel::class.java)
    }

    /**
     * Inflates the layout with Data Binding, sets its lifecycle owner to the GameViewModel
     * to enable Data Binding to observe LiveData, and sets up the RecyclerView with an adapter.
     */
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val binding = FragmentGameBinding.inflate(inflater)

        // Allows Data Binding to Observe LiveData with the lifecycle of this Fragment
        binding.lifecycleOwner = this

        // Giving the binding access to the GameViewModel
        binding.viewModel = viewModel

        //variables
        val red = Color.parseColor("#FF0000")
        val green = Color.parseColor("#008000")
        val white = Color.parseColor("#FFFFFF")
        var score = 0
        var lives = 3
        lateinit var comm: Communicator

        val selectedCategoryId: String? = arguments?.getString("selectedCategoryId")

        Log.d("idkk", selectedCategoryId.toString())

        viewModel.getRandomQuizQuestion(selectedCategoryId.toString())
            binding.submitButton.isEnabled = false

..........
}
}
2021-01-16 00:37:37.166 6565-6565/be.adembacaj.kuizuv2 D/idkk: 1
2021-01-16 00:37:37.313 6565-6565/be.adembacaj.kuizuv2 D/idkk: null
2021-01-16 01:13:36.921 7517-7517/be.adembacaj.kuizuv2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: be.adembacaj.kuizuv2, PID: 7517
    java.lang.NullPointerException
        at be.adembacaj.kuizuv2.GameFragment.onCreateView(GameFragment.kt:51)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:101)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7529)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
binding.buttonStart.setOnClickListener {
    val category = (binding.spinnerQuizCategory.selectedItemPosition + 1).toString())
    val bundle = Bundle()
    bundle.putString("selectedCategoryId", input)
    view?.findNavController()?.navigate(
        R.id.action_titleFragment_to_gameFragment,
        bundle)
}