RxJava 运算符 Debounce 不起作用
RxJava operator Debounce is not working
我想在 Android 应用程序中实现位置自动完成功能,为此我使用了 Retrofit 和 RxJava。我想在用户输入内容后每 2 秒做出响应。我正在尝试为此使用去抖动运算符,但它不起作用。它立即给我结果,没有任何停顿。
mAutocompleteSearchApi.get(input, "(cities)", API_KEY)
.debounce(2, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(prediction -> Observable.fromIterable(prediction.getPredictions()))
.subscribe(prediction -> {
Log.e(TAG, "rxAutocomplete : " + prediction.getStructuredFormatting().getMainText());
});
正如@BenP 在评论中所说,您似乎正在将 debounce
应用于 Place Autocomplete 服务。此调用将 return 一个在完成之前发出单个结果(或错误)的 Observable,此时 debounce
运算符将发出一个且唯一的项目。
你可能想要做的是用类似的东西去抖动用户输入:
// Subject holding the most recent user input
BehaviorSubject<String> userInputSubject = BehaviorSubject.create();
// Handler that is notified when the user changes input
public void onTextChanged(String text) {
userInputSubject.onNext(text);
}
// Subscription to monitor changes to user input, calling API at most every
// two seconds. (Remember to unsubscribe this subscription!)
userInputSubject
.debounce(2, TimeUnit.SECONDS)
.flatMap(input -> mAutocompleteSearchApi.get(input, "(cities)", API_KEY))
.flatMap(prediction -> Observable.fromIterable(prediction.getPredictions()))
.subscribe(prediction -> {
Log.e(TAG, "rxAutocomplete : " + prediction.getStructuredFormatting().getMainText());
});
我想在 Android 应用程序中实现位置自动完成功能,为此我使用了 Retrofit 和 RxJava。我想在用户输入内容后每 2 秒做出响应。我正在尝试为此使用去抖动运算符,但它不起作用。它立即给我结果,没有任何停顿。
mAutocompleteSearchApi.get(input, "(cities)", API_KEY)
.debounce(2, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(prediction -> Observable.fromIterable(prediction.getPredictions()))
.subscribe(prediction -> {
Log.e(TAG, "rxAutocomplete : " + prediction.getStructuredFormatting().getMainText());
});
正如@BenP 在评论中所说,您似乎正在将 debounce
应用于 Place Autocomplete 服务。此调用将 return 一个在完成之前发出单个结果(或错误)的 Observable,此时 debounce
运算符将发出一个且唯一的项目。
你可能想要做的是用类似的东西去抖动用户输入:
// Subject holding the most recent user input
BehaviorSubject<String> userInputSubject = BehaviorSubject.create();
// Handler that is notified when the user changes input
public void onTextChanged(String text) {
userInputSubject.onNext(text);
}
// Subscription to monitor changes to user input, calling API at most every
// two seconds. (Remember to unsubscribe this subscription!)
userInputSubject
.debounce(2, TimeUnit.SECONDS)
.flatMap(input -> mAutocompleteSearchApi.get(input, "(cities)", API_KEY))
.flatMap(prediction -> Observable.fromIterable(prediction.getPredictions()))
.subscribe(prediction -> {
Log.e(TAG, "rxAutocomplete : " + prediction.getStructuredFormatting().getMainText());
});