android - RxJava-发出新项目时如何停止正在运行的任务

标签 android kotlin rx-java

我正在使用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/

相关文章:

android - 支持android中的所有屏幕尺寸吗?

android - 无法获取 SDK 调试证书的 MD5 指纹

android - 在 kindle fire 上开发应用程序有哪些限制?

design-patterns - 在Kotlin中添加元素的优雅方式

android - Jetpack Compose – 我需要使用哪个依赖项才能使用状态委托(delegate)?

groovy - 响应式编程的构建器模式

java - 为什么在 Android 中异步调用时微调 View 会缩小

android - RxJava2 Android Schedulers.io() 和 Schedulers.newThread()

android - Retrofit 无法创建调用适配器

android - 如何从文本按钮中删除填充?