使用swithMap android发送网络请求

问题描述 投票:1回答:1

说我想在用户按下按钮时从我的Android应用发送网络请求。我正在使用RxJava,由于如果用户再次点击发送请求,我想取消上一个请求,则需要使用swithcMap,如下所示:

buttonClickObservable.map(e -> searchTextView.getText().toString())
                     .switchMap(searchText -> sendNetworkRequestToServer(searchText));

如果请求在服务器上处理几秒钟,同时用户再次单击该按钮,会发生什么情况。据我了解,第一个可观察对象将被处理,并且将生成一个新的网络调用,但是服务器已经开始处理第一个可观察对象,所以我发现switchMap在这里没有帮助我吗?

android rx-java2
1个回答
0
投票

取消RxJava可观察执行的唯一方法-取消订阅。因此,您只需执行以下操作即可:RxJavaCallAdapter会将取消委托委托给okhttp客户端。

Subscription subscription = getObservable().subscribe();

 //When you want to stop execution
   subscription.unsubsribe();

final Call<T> call = originalCall.clone();

///如果取消订阅仍在进行中,则尝试取消呼叫。

subscriber.add(Subscriptions.create(new Action0() {
 @Override public void call() {
  call.cancel();
  }
  }));
© www.soinside.com 2019 - 2024. All rights reserved.