方法setCurrentState必须在主线程上调用,Android,Kotlin

Vla*_*hev 3 android kotlin

Android studio 显示行中的错误

\n

REPOSITORY.insert(note){ onSuccess() }

\n

在“AddNewNoteFragmentViewModel”和行中

\n

viewModel.insert(AppNote(name = name, text = text)){ view?.findNavController()?.navigate(R.id.action_addNewNoteFragment_to_mainFragment)}

\n

在文件“AddNewNoteFragment”中

\n

我意识到该错误与流有关,但我不知道如何解决它

\n

如果有人知道,请帮忙,我在互联网上找不到任何有价值的东西

\n

添加新笔记片段

\n
  package com.example.notes.fragments.add_new_note\n\nimport android.os.Bundle\nimport androidx.fragment.app.Fragment\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.lifecycle.ViewModelProvider\nimport androidx.navigation.findNavController\nimport com.example.notes.R\nimport com.example.notes.databinding.FragmentAddNewNoteBinding\nimport com.example.notes.model.AppNote\nimport com.example.notes.utilits.showToast\n\n\nclass AddNewNoteFragment : Fragment() {\n\n    private var _binding: FragmentAddNewNoteBinding? = null\n    val binding get() = _binding!!\n    private lateinit var viewModel: AddNewNoteFragmentViewModel\n\n    override fun onCreateView(\n        inflater: LayoutInflater, container: ViewGroup?,\n        savedInstanceState: Bundle?\n    ): View? {\n        _binding = FragmentAddNewNoteBinding.inflate(inflater, container, false)\n        val view = binding.root\n        return view\n\n    }\n\n\n    override fun onStart() {\n        super.onStart()\n        initialization()\n    }\n\n    private fun initialization() {\n        viewModel = ViewModelProvider(this).get(AddNewNoteFragmentViewModel::class.java)\n\n        binding.buttonAddNote.setOnClickListener {\n\n            val name = binding.inputNameNote.text.toString()\n            val text = binding.inputTextNote.text.toString()\n\n            if (name.isEmpty()){\n\n                showToast("\xd0\x92\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb5 \xd0\xb8\xd0\xbc\xd1\x8f \xd0\xb7\xd0\xb0\xd0\xbc\xd0\xb5\xd1\x82\xd0\xba\xd0\xb8")\n\n            } else{\n\n                viewModel.insert(AppNote(name = name, text = text)){\n                    view?.findNavController()?.navigate(R.id.action_addNewNoteFragment_to_mainFragment)\n                }\n\n            }\n\n        }\n    }\n\n    override fun onDestroyView() {\n        super.onDestroyView()\n        _binding = null\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

添加新注释片段视图模型

\n
package com.example.notes.fragments.add_new_note\n\nimport android.app.Application\nimport androidx.lifecycle.AndroidViewModel\nimport androidx.lifecycle.viewModelScope\nimport com.example.notes.model.AppNote\nimport com.example.notes.utilits.REPOSITORY\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\n\nclass AddNewNoteFragmentViewModel(application: Application): AndroidViewModel(application) {\n\n    fun insert(note: AppNote,onSuccess:()-> Unit) =\n        viewModelScope.launch (Dispatchers.IO){\n            REPOSITORY.insert(note){\n                onSuccess()\n            }\n        }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

错误画面

\n

在此输入图像描述

\n

Vla*_*hev 6

问题已解决 在AddNewNoteFragmentViewModel中需要Dispatchers.IO更改为Dispatchers.Main