【问题标题】:How to implement a RX room query如何实现 RX 房间查询
【发布时间】:2018-02-12 16:35:02
【问题描述】:

我对@9​​87654321@ 和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")
}

但如果没有关于类型期望的各种错误,我无法成功实现它。

【问题讨论】:

  • "all kind of errors" 什么错误?
  • 我不是指控制台中的错误,我指的是尝试编写代码时出现的错误,例如:Type parameter bound is not satisfiedRequired: Action! Found: Action1<Throwable> 等。我无法编写 subscribe() 部分。

标签: android kotlin rx-java android-room


【解决方案1】:

嗯。 Completable 什么都不返回,只是终止事件 onComplete/onError

试试:

  • 在你的道中回归单身
  • 您的订阅方法应类似于 subscribe({function1},{function2})

永远不要使用 Schedulers.newThread() 进行 IO 操作。相反,这更喜欢 Schedulers.io(),因为它使用线程池中的可重用线程,而 Schedulers.newThread() 只创建一个新线程,不可重用

【讨论】:

  • 好的,我将Dao 中的函数更改为返回Single。现在,你能告诉我function1 应该是什么样子吗?如何传递字符串参数,以及如何访问subscribe() 块内的字符串
  • 好的,我想通了。问题在于语法:() 是不必要的,而只是subscribe{ function1(jsonSTring) } din 工作。
【解决方案2】:

我认为您正在寻找的语法是这样的:

  DBManager.getEmployeesIdsJsonArray()
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe( { jsonString ->
           // onNext
           // Do something with jsonString
        }, { throwable ->
           // onError
           // Do somethign with throwable
        } )

【讨论】:

  • 谢谢,但只写jsonString - > 不会编译。对于 throwable,我已经定义了一个 Action<Throwable>
  • 不知道jsonString是谁。
猜你喜欢
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多