onComplete не вызывается при возврате ответа как Flowable - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь сделать вызов webservie, используя retrofit и rxjava 2. Я изучал два разных подхода к использованию RxJava2. проблема в том, что я получаю ответ, когда я использую Observable, но он не работает с Flowable. Журналы не распечатываются при использовании Flowable, я пытался отладить его, но он не входит внутрь onNext или onComplete или onError. исполняется только onSubscribe.

1) с использованием наблюдаемого в качестве типа возврата

new WebRequestManager().getContactObservable(userRequest)   
    .subscribe(new Observer<ResponseData>() {
                   @Override
                   public void onSubscribe(Disposable d) {

                   }

                   @Override
                   public void onNext(ResponseData responseData) {

                       Log.e(TAG , "data "+responseData.getStatus());
                   }

                   @Override
                   public void onError(Throwable e) {

                   }

                   @Override
                   public void onComplete() {

                       Log.e(TAG , "data complete");

                   }
               }
    );

2) Использование flowable в качестве типа возврата

new WebRequestManager().getContactFlowable(userRequest)

 .subscribe(new Subscriber<ResponseData>() {
     @Override
     public void onSubscribe(Subscription s) {

         Log.e(TAG , "contact subscription ");

     }

     @Override
     public void onNext(ResponseData responses) {

         Log.e(TAG , "contact onNext ");


     }

     @Override
     public void onError(Throwable t) {

     }

     @Override
     public void onComplete() {

         Log.e(TAG , "contact onComplete ");
     }
 });

Остальной контакт дооснащения API

public interface ContactApi {

    @POST(WebRequest.GET_CONTACTS)
    Flowable<ResponseData> getContactFlowable(@Body UserRequest userRequest);

    @POST(WebRequest.GET_CONTACTS)
    Observable<ResponseData> getContactObservable(@Body UserRequest userRequest);

}

звонок в веб-сервис

public Flowable<ResponseData> getContactsData(UserRequest userRequest){
        return webRequest.getWebClient().create(ContactApi.class).getContacts(userRequest);


    }

    public Observable<ResponseData> getContact(UserRequest userRequest){
        return webRequest.getWebClient().create(ContactApi.class).getContact(userRequest);

    }

получение модифицированного экземпляра

 public static Retrofit getWebClient(){

        //if(okHttpClient == null)
            okHttpClient = new OkHttpClient.Builder()
                                    .connectTimeout(120,TimeUnit.SECONDS)
                                    .readTimeout(120,TimeUnit.SECONDS)
                                    .writeTimeout(120,TimeUnit.SECONDS)

                                    .addInterceptor(new WebRequestInterceptor("\"application/json\""))
                                    .build();


      // if(client == null)
        client = new  Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient)
                .addConverterFactory(LoganSquareConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        return client;
    }

1 Ответ

0 голосов
/ 01 мая 2018

С Subscriber s вы должны позвонить request, чтобы получить предметы:

new WebRequestManager().getContactFlowable(userRequest)
    .subscribe(new Subscriber<ResponseData>() {
        @Override
        public void onSubscribe(Subscription s) {
            Log.e(TAG , "contact subscription ");
            s.request(Long.MAX_VALUE); // <---------------------------------
        }

        @Override
        public void onNext(ResponseData responses) {
            Log.e(TAG , "contact onNext ");
        }

        @Override
        public void onError(Throwable t) {

        }

        @Override
        public void onComplete() {
            Log.e(TAG , "contact onComplete ");
        }
   });

См. Также DisposableSubscriber с его примером.

...