使用swithMap android发送网络请求

时间:2019-12-30 06:24:37

标签: android rx-java2

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

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

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

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的只是在请求进行中禁用按钮,并在请求完成或出错时启用它。

伪代码:

buttonClickObservable.map(e -> searchTextView.getText().toString())
            .doOnNext(e -> buttonClickView.setEnabled(false))
            .switchMap(searchText -> sendNetworkRequestToServer(searchText));
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    result -> ...,
                    error -> buttonClickView.setEnabled(true),
                    () -> buttonClickView.setEnabled(true)
            )

但是,这种解决方案并不理想。我认为您正在寻找的是遵循MVI架构并正确管理状态。如果您有兴趣,可以观看以下精彩演讲:https://www.youtube.com/watch?v=0IKHxjkgop4