Android 使用RxJava返回结果值

Android 使用RxJava返回结果值,android,rx-java,rx-android,Android,Rx Java,Rx Android,我想在WebView中用RxJava实现点击去Bouncing。 例如,用户快速点击链接,我只想处理第一次点击。 首先,我认为throttleFirst有助于此 private final BehaviorSubject<String> urlLoading = BehaviorSubject.create(); private final Observable<String> throttled = urlLoading.throttleFirst(CLIC

我想在WebView中用RxJava实现点击去Bouncing。
例如,用户快速点击链接,我只想处理第一次点击。
首先,我认为
throttleFirst
有助于此

  private final BehaviorSubject<String> urlLoading = BehaviorSubject.create();

  private final Observable<String> throttled =  urlLoading.throttleFirst(CLICK_THROTTLE_MILLIS, TimeUnit.MILLISECONDS);  

  //...
  throttled.subscribe(new Action1<String>() {
    @Override
    public void call(String url) {
      something(url); // :/
    }
  });
  //...

  // WebView callback
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // return something(); // original

    // i want to throttle events and return something() if it's ok or return just true for debounced events
    urlLoading.onNext(url);
    return ... ?
  }
private final BehaviorSubject urlLoading=BehaviorSubject.create();
private final Observable throttled=urlLoading.throttleFirst(单击THROTTLE,时间单位为毫秒);
//...
throttled.subscribe(新操作1(){
@凌驾
公共无效调用(字符串url){
某物(url);/:/
}
});
//...
//WebView回调
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
//返回某物();//原始
//我想限制事件并返回一些()如果可以,或者对于取消宣布的事件返回true
urlLoading.onNext(url);
回来
}
throttleFirst
工作正常,但我注意到我无法以这种方式返回值

问题:
当返回类型为
的方法应该重写eurlloding


或者我不应该在这种情况下使用Rx吗?(通过另一种方式,如通过
Handler#postDelayed
?)更改标志)

您希望它首先听到的单击
节流的
将发出的

由于您希望返回一个
布尔值
,因此必须同步,然后才能阻塞

使用RxJava(未经测试)可以做什么:

  • 发出
    某物(url)结果
  • 拍摄(1)
    拍摄第一个事件
  • toBloking
    阻止RxJava流并保持同步
  • 返回该值
例如:

 public boolean shouldOverrideUrlLoading(WebView view, String url) {

     urlLoading.onNext(url);
     return throttler
                .map(url -> something(url))
                .take(1)
                .toBlocking()
                .single();
  }

别忘了删除节流阀
子描述
代码。

RxJava似乎不适合此任务。thx,但这种方法每次都会产生新的可观察对象,效果不好