首先,我还是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; }
作为该函数的结果,我仅获得一个结果(观察值),因此我确定该函数本身仅调用了一次,但所有内部发射器均已调用-> {在此}调用了两次,后端通知我他两次获得了请求我和我仔细检查了一下,发现
Log.e("api request", "calling api request");
行调用了两次
我实现了相同的功能,但没有rxjava并发现该请求仅被调用了一次
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();
}
}
首先,我还是RX Java的新手,但我了解到Single.create仅发出一个可观察的信号,这就是发生的情况,但问题是该函数本身执行了两次,因此我如何制作我的...
我订阅了不止一次