我正在使用RxJava为我的Android应用程序构建搜索功能。当用户在EditText
中键入/更改查询字符时,发射器将发出新的查询文本,并且我在数据库中搜索以获取与查询匹配的结果。
getEditTextObservable()
.subscribeOn(Schedulers.computation())
.debounce(500, TimeUnit.MILLISECONDS)
.filter {
!it.isNullOrEmpty()
}
.map {
//start searching
getResultsInDatabase(it) //this function takes a long time to complete
}.observeOn(AndroidSchedulers.mainThread())
.subscribe{
//render results on screen
}
方法getResultsInDatabase(string:String)
需要很长时间才能完成,当查询文本更改时,我想停止方法getResultsInDatabase(string:String)
(如果它正在使用先前发出的查询运行),以再次在新查询中运行它。我该怎么做呢?谢谢您的帮助。感谢您阅读我的问题。
最佳答案
您需要一个switchMap
。
getEditTextObservable()
.subscribeOn(Schedulers.computation())
.debounce(500, TimeUnit.MILLISECONDS)
.filter { !it.isNullOrEmpty() } //Be careful with this. Should clearing text clear results too?
.switchMap { Observable.fromCallable { getResultsInDatabase(it) }}
.observeOn(AndroidSchedulers.mainThread())
.subscribe{
//render results on screen
}
关于android - RxJava-发出新项目时如何停止正在运行的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64587834/