从RxTextView.textChanges减慢可观察的发射

时间:2018-04-26 17:58:18

标签: android rx-java rx-android android-mvp

我一直在尝试实现此功能,我必须搜索用户键入的每个关键字,但我有这个限制,我只能在上一次调用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模式的视图中发生事件的方式。如果您还有其他需要评论!

1 个答案:

答案 0 :(得分:0)

有两种方法,一种方法使用publish(),混合使用sampledebounce来确保时机安排。

另一种方式是ObservableConflate:这个observable是为了解决这个问题而开发的。

keyboardInputObservable
  .compose(f -> Observable.create(new ObservableConflate<Integer>(f, 1, TimeUnit.SECONDS, scheduler) ) )
  .doOnNext( input -> lookup(input) )
  ...

运营商会将请求率限制为lookup到每秒一次。

注意:在某些库版本中,create()运算符可能需要unsafeCreate()

你可以感谢@akarnokd的解决方案。