сначала я все еще новичок в RX java, но я узнал, что Single.create испускает только один наблюдаемый, и это то, что происходит, но проблема в том, что сама функция выполняется дважды, так что как я делаю свой запрос
@Override
public Single<BaseResponse<D>> call() {
Single<BaseResponse<D>> singleResponse = Single.create(emitter -> {
Log.e("api request", "calling api request");
request().getAsOkHttpResponseAndParsed(typeToken(), new OkHttpResponseAndParsedRequestListener<BaseData<D>>() {
@Override
public void onResponse(Response okHttpResponse, BaseData<D> response) {
try {
BaseResponse<D> r = new BaseResponse<D>(okHttpResponse) {
};
r.setData(response.getData());
r.setStatus(response.getStatus());
emitter.onSuccess(r);
} catch (Throwable throwable) {
Log.e("error", "throwable");
emitter.onError(throwable);
}
}
@Override
public void onError(ANError anError) {
Log.e("error", "error");
emitter.onError(anError);
}
});
});
singleResponse.doOnSubscribe(__ ->
EspressoIdlingResource.countingIdlingResource.increment()).
doFinally(EspressoIdlingResource.countingIdlingResource::decrement).subscribe();
return singleResponse;
}
в результате этой функции я получаю только один результат (observale), поэтому я уверен, что сама функция вызывает только один раз, но все внутри эмиттера -> {here} вызывается дважды, и серверная часть сообщила мне, что он получает запросите у меня дважды, и я дважды проверяю это и обнаружил, что строка Log.e("api request", "calling api request");
вызывает дважды
Я реализую ту же функцию, но без rx java и обнаружил, что запрос вызывается только один раз
try {
request().getAsOkHttpResponseAndParsed(typeToken(), new OkHttpResponseAndParsedRequestListener<BaseData<D>>() {
@Override
public void onResponse(Response okHttpResponse, BaseData<D> response) {
try {
BaseResponse<D> r = new BaseResponse<D>(okHttpResponse) {
};
r.setData(response.getData());
r.setStatus(response.getStatus());
// emitter.onSuccess(r);
} catch (Throwable throwable) {
Log.e("error", "throwable");
// emitter.onError(throwable);
}
}
@Override
public void onError(ANError anError) {
Log.e("error", "error");
// emitter.onError(anError);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}