如何在 Room 方法中用 RxJava 替换 AsyncTask?
How do I replace AsyncTask with RxJava in Room methods?
我有一个使用 Asynctask
在 Room
数据库中设置新项目的插入方法。我可以去掉 InsertContactAsyncTask
class 并改用 RxJava
吗?我在网上找不到这样的例子
方法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])
}
}
override fun insert(contact: Contact) {
Single.fromCallable { contactDao.insert(contact) }
.subscribeOn(Schedulers.io())
.subscribe()
}
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}
}
和之前一样订阅
覆盖插入方法并通过订阅接收回调:-
override fun insert(contact: Contact) {
Single.fromCallable { //Insert Query here }
.subscribeOn(// thread )
.subscribe()
}
我有一个使用 Asynctask
在 Room
数据库中设置新项目的插入方法。我可以去掉 InsertContactAsyncTask
class 并改用 RxJava
吗?我在网上找不到这样的例子
方法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])
}
}
override fun insert(contact: Contact) {
Single.fromCallable { contactDao.insert(contact) }
.subscribeOn(Schedulers.io())
.subscribe()
}
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}
}
和之前一样订阅
覆盖插入方法并通过订阅接收回调:-
override fun insert(contact: Contact) {
Single.fromCallable { //Insert Query here }
.subscribeOn(// thread )
.subscribe()
}