我对Room
和RXJava
很新,我想用它们来执行一个非常简单的查询,但是我在实现RX部分和处理结果时遇到了问题。
@Dao
interface DepartmentDao{
//....
@Query ("SELECT employeesIds FROM Department WHERE Department_name LIKE :name")
fun getEmployeesIds(name:String):String //this is a jsonArray stored as string
}
然后我有Kotlin
个对象,我写了一些与数据库相关的其他方法,而不是@Dao
object DBManager {
fun getEmployeesIdsJsonArray():Completable = Completable.fromCallable {
mDataBase.DepartmentDao().getEmployeesIds(deptName)
}
}
我想在我的片段中查询它,并在查询完成时使用查询结果(在本例中为字符串)。这是我被锁定并需要你帮助的地方。
DBManager.getEmployeesIdsJsonArray()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( //here I get locked, how can I handle this?)
我希望有像
这样的东西{
onSuccess -> jsonString , //this is the string resulted, feel free to use it
onError -> Log.e(TAG, "query failed")
}
但是如果没有关于类型期望的所有错误,我就无法成功实现它。
答案 0 :(得分:0)
我认为您正在寻找的语法是:
DBManager.getEmployeesIdsJsonArray()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( { jsonString ->
// onNext
// Do something with jsonString
}, { throwable ->
// onError
// Do somethign with throwable
} )
答案 1 :(得分:0)
好。 Completable什么都不返回,只是终止事件onComplete / onError
尝试:
永远不要使用Schedulers.newThread()进行IO操作。相反,这更喜欢Schedulers.io(),因为它使用来自线程池的可重用线程,而Schedulers.newThread()只创建一个新的线程,这是不可重用的