【发布时间】:2021-05-21 20:48:57
【问题描述】:
我是 viewmodel 和房间数据库的新手。我正在学习教程
https://www.adictosaltrabajo.com/2019/03/04/persistencia-de-datos-en-android-con-room/
但是当我运行应用程序时出现错误
"Unable to start activity ComponentInfo{com.example.romapp/com.example.romapp.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.romapp.ViewModel.ContactsViewModel"
这是我的视图模型类
class ContactsViewModel(application: Application) : AndroidViewModel(application) {
private val repository = ContactsRepository(application)
val contacts = repository.getContacts()
fun saveContact(contact: Person) {
repository.insert(contact)
}
}
这是我的仓库
class ContactsRepository(application: Application) {
private val contactDao: ContactDao? = com.example.romapp.DataBase.ContactsDatabase.getInstance(application)?.contactDao()
fun insert(contact: Person) {
if (contactDao != null) InsertAsyncTask(contactDao).execute(contact)
}
fun getContacts(): LiveData<List<Person>> {
return contactDao?.getOrderedAgenda() ?: MutableLiveData<List<Person>>()
}
private class InsertAsyncTask(private val contactDao: ContactDao) :
AsyncTask<Person, Void, Void>() {
override fun doInBackground(vararg contacts: Person?): Void? {
for (contact in contacts) {
if (contact != null) contactDao.insert(contact)
}
return null
}
}
}
这是我的主类创建
contactsViewModel = run {
ViewModelProviders.of(this).get(ContactsViewModel::class.java)
}
这是我添加到我的 build.gradle 的内容
implementation 'android.arch.persistence.room:runtime:1.1.1'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
implementation "android.arch.lifecycle:extensions:1.1.1"
任何帮助或建议都会很棒
【问题讨论】:
-
您能否将您的
dependencies块包含在您的build.gradle文件中?这看起来您使用的是更新版本的 Lifecycle,但不是足够新的 Fragments/Activity 版本。 -
感谢您的回复。我修改了问题
-
您是否有理由使用长期弃用的
android.arch版本而不是使用 AndroidX 版本? -
我正在学习教程,因为我是新手
标签: android kotlin android-room viewmodel