2017-09-12 67 views
1

现在我正试图了解如何使用RxJava2库和Retrofit2。Retrofit2 + RxJava2适用于HTTP请求

我的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
  • onComplet eObservable

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

回答

1

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

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

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

+0

是的,这种方法的工作原理。谢谢!我没有看到某处提到的方法。但是,如果我想从Firebase获取100 Mb数据,并且Firebase会分数部分提供数据。我需要使用Flowable吗?以及如何设置Flowable来接收数据? – Delphian

+0

对不起,我不太了解Firebase ... –

相关问题