【问题标题】:Retrofit2 + RxJava2 Flowable for HTTPs request用于 HTTPs 请求的 Retrofit2 + RxJava2 Flowable
【发布时间】:2017-09-12 12:56:07
【问题描述】:

现在我正在尝试了解如何将 RxJava2 库与 Retrofit2 一起使用。

我的 API 服务:

public interface ApiService {

    @GET
    Observable<String> getObservable(@Url String url);

    @GET
    Flowable<String> getFlowable(@Url String url);
}

和主要活动:

mApiService.getObservable("https://google.com")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableObserver<String>() {
                    @Override
                    public void onNext(@NonNull String s) {
                        Log.d(TAG,"onNextObservable");
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                       Log.d(TAG,"onErrorObservable");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG,"onCompleteObservable");
                    }
                });


mApiService.getFlowable("https://google.com")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new FlowableSubscriber<String>() {
            @Override
            public void onSubscribe(@NonNull Subscription s) {
                Log.d(TAG,"onSubscribeFlowable");
            }

            @Override
            public void onNext(String s) {
                Log.d(TAG,"onNextFlowable");

            }

            @Override
            public void onError(Throwable t) {
                Log.d(TAG,"onErrorFlowable");
            }

            @Override
            public void onComplete() {
                Log.d(TAG,"onCompleteFlowable");
            }
        });

在我的日志中我看到:

  • onNextObservable
  • onSubscribeFlowable
  • onCompleteObservable

为什么我没有看到 onNextFlowable?我无法得到 Flowable 的回复。也许有更紧凑的代码编写方法?

【问题讨论】:

    标签: android retrofit2 rx-java2


    【解决方案1】:

    调用 URL 是只返回一个结果或失败(更像 SingleMaybe)。 Observable 也可以工作。但是Flowable 在这里没有意义。

    无论如何,尝试在FlowableonSubscribe(...) 中添加s.request(1)

    Flowable 有“背压”的概念。您必须询问数据。

    【讨论】:

    • 是的,这种方法有效。谢谢!我没有看到某处提到的方法。但是,如果我想从 firebase 获取 100 Mb 数据,而 firebase 会分批提供数据。我需要使用 Flowable 吗?以及如何设置 Flowable 来接收数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多