android - 防止快速单击按钮并使用 rxjava 发出请求

标签 android kotlin rx-java2

我有以下方法请求从端点获取口袋妖怪。
我想通过快速单击将多次调用此方法的按钮来防止用户提出快速请求。我使用了 throttle * 方法和去抖动。
基本上,如果用户在 300 毫秒内快速单击按钮,我正在寻找它应该接受该持续时间内的最后一次单击。但是,我正在经历的是所有请求都在发出。即,如果用户在该持续时间内快速点击 3 次,我仍然会收到 3 个请求。

   fun getPokemonDetailByName(name: String) {
        pokemonDetailInteractor.getPokemonDetailByName(name)
            .subscribeOn(pokemonSchedulers.background())
            .observeOn(pokemonSchedulers.ui())
            .toObservable()
            .throttleFirst(300, TimeUnit.MILLISECONDS)
            .singleOrError()
            .subscribeBy(
                onSuccess = { pokemon ->
                    pokemonDetailLiveData.value = pokemon
                },
                onError = {
                    Timber.e(TAG, it.localizedMessage)
                }
            ).addTo(compositeDisposable)
    }

最佳答案

Bascially, what I am looking for if the user rapidly clicks on the button within 300 milliseconds duration it should accept the last click in that duration


对我来说听起来更像是去抖运算符(operator)的行为。从文档

Debounce — only emit an item from an Observable if a particular timespan has passed without it emitting another item


你可以看到大理石图here

关于android - 防止快速单击按钮并使用 rxjava 发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62814430/

相关文章:

java - 如何在 RxJava2 中使用 void Subject?

android - 每个值都有布局(imageview + imagebutton)的Gridview

android - 通过 Shared Preference 从 Sugar ORM 中检索数据

android - 当您触摸外部或使用 Anko 按回键时,如何防止对话框(警报)关闭

rx-java - 我应该使用响应式(Reactive)编程(RxJava)来解决复杂问题吗?

java - RxPermission 在 Release模式下导致内部错误

android - 当我将 Webview 放在 android 中的 ScrollView 中时,底部会添加空白

java - Android App Widget,变量正在重启

java - 膨胀 android.support.v7.widget.CardView 时出错

Kotlin 数据类 + Gson : optional field