Я пытаюсь сделать вызов 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;
}