Как заменить AsyncTask на Rx Java в методах Room? - PullRequest
0 голосов
/ 14 января 2020

У меня есть метод вставки, который использует Asynctask для установки нового элемента в базе данных Room. Можно ли избавиться от класса InsertContactAsyncTask и перейти на использование RxJava? Я не могу найти такие примеры по методу Inte rnet

insert:

override fun insert(contact: Contact) {
        InsertContactAsyncTask().execute(contact)
}

AsyncTask class:

class InsertContactAsyncTask: AsyncTask<Contact, Unit, Unit>() {

        private val contactDao: ContactDao? = null

        override fun doInBackground(vararg param: Contact) {
            contactDao?.insert(param[0])
        }
}

Ответы [ 3 ]

3 голосов
/ 14 января 2020
override fun insert(contact: Contact) {
    Single.fromCallable { contactDao.insert(contact) }
          .subscribeOn(Schedulers.io())
          .subscribe()
}
2 голосов
/ 14 января 2020
fun insert(contact:Contact) : Completable

Затем где-то вы вызываете этот метод

contactDao.insert()
.subscribeOn(Schedulers.IO)
.observeOn(AndroidSchedulers.Main)
.subscribe{Log.d("test","insertcompleted")
//do something when insert completed
}

или просто помещаете вставку в завершаемый файл, как это

fun insertCompletable(contact:Contact){
Completable.fromAction{contactDao.insert}
}

, и подписываетесь на него так же, как и предыдущий

0 голосов
/ 14 января 2020

Переопределить метод вставки и получить обратный вызов, подписавшись на него следующим образом: -

override fun insert(contact: Contact) {
Single.fromCallable { //Insert Query here }
      .subscribeOn(// thread )
      .subscribe()

}

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