在 MVVM 架构中使用领域时出现线程错误
thread error while using realm in MVVM architecture
我在我的 kotlin 项目中使用 Realm 数据库。
我使用 MVVM 架构,所以我创建了一个存储库 class,其中包含以下代码:
class DatabaseRepository {
private val database = Realm.getDefaultInstance()
fun addOrUpdateUser(user: JSONObject) {
database.executeTransactionAsync{
database.createOrUpdateObjectFromJson(UserModel::class.java, user)
}
}
}
此外,我已经创建了我的 ViewModel class,如下所示:
class DatabaseViewModel(private val database:DatabaseRepository) : ViewModel() {
fun addUser(information: JSONObject) {
database.addOrUpdateUser(information)
}
}
我的 View ModelFactory class 是这样的:
class ViewModelFactory(private val databaseRepository:DatabaseRepository):ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return modelClass.getConstructor(DatabaseRepository::class.java).newInstance(databaseRepository)
}
}
所以我在我的 MainActivity 中创建它们的实例,如下所示:
val databaseRepo=DatabaseRepository()
val factory=ViewModelFactory(databaseRepo)
database = ViewModelProviders.of(this,factory).get(DatabaseViewModel::class.java)
问题是,当我尝试使用 ViewModel 'addUser' 函数向数据库添加一些数据时 class 我收到此错误:
Realm objects can only be accessed on the thread they were created.
我做错了什么?
唯一的问题是因为 executeTransactionAsync,所以我从:
executeTransactionAsync
至
executeTransaction
成功了!
我在我的 kotlin 项目中使用 Realm 数据库。 我使用 MVVM 架构,所以我创建了一个存储库 class,其中包含以下代码:
class DatabaseRepository {
private val database = Realm.getDefaultInstance()
fun addOrUpdateUser(user: JSONObject) {
database.executeTransactionAsync{
database.createOrUpdateObjectFromJson(UserModel::class.java, user)
}
}
}
此外,我已经创建了我的 ViewModel class,如下所示:
class DatabaseViewModel(private val database:DatabaseRepository) : ViewModel() {
fun addUser(information: JSONObject) {
database.addOrUpdateUser(information)
}
}
我的 View ModelFactory class 是这样的:
class ViewModelFactory(private val databaseRepository:DatabaseRepository):ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return modelClass.getConstructor(DatabaseRepository::class.java).newInstance(databaseRepository)
}
}
所以我在我的 MainActivity 中创建它们的实例,如下所示:
val databaseRepo=DatabaseRepository()
val factory=ViewModelFactory(databaseRepo)
database = ViewModelProviders.of(this,factory).get(DatabaseViewModel::class.java)
问题是,当我尝试使用 ViewModel 'addUser' 函数向数据库添加一些数据时 class 我收到此错误:
Realm objects can only be accessed on the thread they were created.
我做错了什么?
唯一的问题是因为 executeTransactionAsync,所以我从:
executeTransactionAsync
至
executeTransaction
成功了!