ViewModel 没有零参数构造函数

ViewModel has no zero argument constructor

我正在尝试使用 recyclerview 和房间库制作一个简单的 ToDoList 应用程序。我正在关注 android 开发人员代码实验室 using room and mvvm architecture and I seem to have hit a stump. I have set up every layer of the application but I'm getting an error when trying to instantiate the ViewModel using the ViewModelProvider. Here is the code from my ViewModel class。

class TaskViewModel(application: Application) : AndroidViewModel(application) {

private val repository : TaskRepository

val allTasks : LiveData<List<Task>>



init{
    val tasksDao = TaskRoomDatabase.getDatabase(application)!!.taskDao()
    repository = TaskRepository(tasksDao)
    allTasks = repository.allTasks

}

fun saveTask(task : Task) = viewModelScope.launch(Dispatchers.IO){
    repository.saveTask(task)
}

}

这里是我的 MainFragment 中的代码,我试图从中初始化 ViewModel:

class MainFragment() : Fragment() {

private lateinit var recyclerView : RecyclerView
private lateinit var sharedTaskViewModel : TaskViewModel
private lateinit var fab : FloatingActionButton
var tasks = emptyList<Task>()
private lateinit var adapter : MainRecyclerViewAdapter

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val view = inflater.inflate(R.layout.fragment_main, container, false)
    fab = view.findViewById(R.id.floatingActionButton)
    //Initialize the recyclerview
    recyclerView = view.findViewById(R.id.main_recyclerview)
    adapter = MainRecyclerViewAdapter()
    recyclerView.adapter = adapter
    recyclerView.layoutManager = LinearLayoutManager(view.context)


    return view
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    sharedTaskViewModel = ViewModelProvider(this).get(TaskViewModel::class.java)


    fab.setOnClickListener {
        fragmentManager!!.beginTransaction().apply {
            replace(R.id.fl_fragment_main, NewTaskFragment())
            commit()
        }
    }

}

}

当我 运行 代码时,我收到此消息:

2020-08-09 11:31:00.734 27860-27860/com.robybp.todolist E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.robybp.todolist, PID: 27860
java.lang.RuntimeException: Cannot create an instance of class com.robybp.todolist.view_models.TaskViewModel
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
    at com.robybp.todolist.view.fragments.MainFragment.onViewCreated(MainFragment.kt:45)
 Caused by: java.lang.InstantiationException: java.lang.Class<com.robybp.todolist.view_models.TaskViewModel> has no zero argument constructor
    at java.lang.Class.newInstance(Native Method)

如果问题可能是“Obslite”,请原谅我,但我只是熟悉 room 和 mvvm 架构。 谢谢理解。

尝试替换:

sharedTaskViewModel = ViewModelProvider(this).get(TaskViewModel::class.java)

sharedTaskViewModel = ViewModelProvider.AndroidViewModelFactory(application)
    .create(TaskViewModel::class.java)