在 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

成功了!