ошибка потока при использовании области в архитектуре MVVM - PullRequest
0 голосов
/ 14 марта 2020

Я использую базу данных Realm в своем проекте kotlin. Я использую архитектуру MVVM, поэтому я создал класс репозитория, который содержит коды ниже:

class DatabaseRepository {
    private val database = Realm.getDefaultInstance()

    fun addOrUpdateUser(user: JSONObject) {
        database.executeTransactionAsync{
            database.createOrUpdateObjectFromJson(UserModel::class.java, user)
        }
    }
}

Также я создал свой класс ViewModel следующим образом:

class DatabaseViewModel(private val database:DatabaseRepository) : ViewModel() {


    fun addUser(information: JSONObject) {
        database.addOrUpdateUser(information)
    }

}

, и мой класс View ModelFactory имеет вид как это:

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)
    }
}

, поэтому я создаю их экземпляр в своей основной деятельности следующим образом:

val databaseRepo=DatabaseRepository()
val factory=ViewModelFactory(databaseRepo)
database = ViewModelProviders.of(this,factory).get(DatabaseViewModel::class.java)

проблема в том, что, хотя я пытаюсь добавить некоторые данные в базу данных, используя Функция 'addUser' в классе ViewModel Я получаю эту ошибку:

Доступ к объектам области возможен только в том потоке, в котором они были созданы.

что я сделал не так?

1 Ответ

0 голосов
/ 15 марта 2020

единственная проблема была из-за executeTransactionAsyn c, поэтому я изменил с:

executeTransactionAsync

на

executeTransaction

и все заработало!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...