我一直在尝试实现此功能,我必须搜索用户键入的每个关键字,但我有这个限制,我只能在上一次调用1秒后才能访问服务器。所以,如果我输入a,b,c,d 打击应该像这样工作 一个 --- 1秒间隔--- AB --- 1秒间隔--- ABC --- 1秒间隔--- ABCD
我尝试使用去抖动,延迟(导致looper异常)。有人可以告诉我如何使用RxJava(Android)实现它。
public Observable<String> userTypings() {
return RxTextView.textChanges(inputText).skip(1).flatMap(new Func1<CharSequence, Observable<String>>() {
@Override
public Observable<String> call(CharSequence charSequence) {
return Observable.just(charSequence.toString());
}
});
}
这是在MVP模式的视图中发生事件的方式。如果您还有其他需要评论!
答案 0 :(得分:0)
有两种方法,一种方法使用publish()
,混合使用sample
和debounce
来确保时机安排。
另一种方式是ObservableConflate
:这个observable是为了解决这个问题而开发的。
keyboardInputObservable
.compose(f -> Observable.create(new ObservableConflate<Integer>(f, 1, TimeUnit.SECONDS, scheduler) ) )
.doOnNext( input -> lookup(input) )
...
运营商会将请求率限制为lookup
到每秒一次。
注意:在某些库版本中,create()
运算符可能需要unsafeCreate()
。
你可以感谢@akarnokd的解决方案。