如何实现一个RX房间查询
How to implement a RX room query
我对 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)
}
}
我想在我的 Fragment 中查询它,并在查询完成时使用查询结果(在本例中为字符串)。这是我被锁定的地方,需要你的帮助。
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")
}
但如果没有关于类型期望的各种错误,我无法成功实施它。
我想你要找的语法是这样的:
DBManager.getEmployeesIdsJsonArray()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( { jsonString ->
// onNext
// Do something with jsonString
}, { throwable ->
// onError
// Do somethign with throwable
} )
嗯。 Completable returns 没什么,只是终止事件 onComplete/onError
尝试:
- Return道中单身
- 您的订阅方法应该类似于 subscribe({function1},{function2})
永远不要使用 Schedulers.newThread() 进行 IO 操作。相反,它更喜欢 Schedulers.io(),因为它使用线程池中的可重用线程,而 Schedulers.newThread() 只创建一个不可重用的新线程
我对 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)
}
}
我想在我的 Fragment 中查询它,并在查询完成时使用查询结果(在本例中为字符串)。这是我被锁定的地方,需要你的帮助。
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")
}
但如果没有关于类型期望的各种错误,我无法成功实施它。
我想你要找的语法是这样的:
DBManager.getEmployeesIdsJsonArray()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( { jsonString ->
// onNext
// Do something with jsonString
}, { throwable ->
// onError
// Do somethign with throwable
} )
嗯。 Completable returns 没什么,只是终止事件 onComplete/onError
尝试:
- Return道中单身
- 您的订阅方法应该类似于 subscribe({function1},{function2})
永远不要使用 Schedulers.newThread() 进行 IO 操作。相反,它更喜欢 Schedulers.io(),因为它使用线程池中的可重用线程,而 Schedulers.newThread() 只创建一个不可重用的新线程