gpt4 book ai didi

android - 将累积的请求发送到 webservice - RxJava2

转载 作者:搜寻专家 更新时间:2023-11-01 08:29:24 25 4
gpt4 key购买 nike

我的应用程序中有添加按钮,让用户将项目添加到列表中,如果用户单击添加按钮,我不会请求立即转到网络服务,我希望请求被累积并每 1 秒发送一次总点击次数。而不是每次用户单击添加按钮时都发送请求。

我看到为 RxSearchView 实现了类似的东西。我检查了代码太复杂了

我需要一些帮助,我应该从哪里开始解决这样的问题?或任何现成的解决方案?

最佳答案

您正在寻找 debounce 运算符:

Returns an Observable that mirrors the source ObservableSource, except that it drops items emitted by the source ObservableSource that are followed by newer items before a timeout value expires. The timer resets on each emission.enter image description here

只需将您的点击事件包装到 Observable 中:

Observable<Object> getButtonObservable(final Button button) {
return Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(final ObservableEmitter<Object> e) throws Exception {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
e.onNext(new Object()); //instead of Object you can use any data, e.g. derived from View tag
}
});
e.setCancellable(new Cancellable() {
@Override
public void cancel() throws Exception {
button.setOnClickListener(null);
}
});
}
});
}

并在 onDestroy (onDestroyView) 中应用该运算符,不要忘记取消订阅:

Button addButton;
Disposable addButtonDisposable;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
getButtonObservable(addButton)
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
addButtonDisposable = disposable;
}
})
.debounce(1, TimeUnit.SECONDS)
... //make request using flatMap or doOnNext, and subscribe
}

@Override
protected void onDestroy() {
super.onDestroy();
addButtonDisposable.dispose();
}

关于android - 将累积的请求发送到 webservice - RxJava2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42019757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com