[使用Rx Java时重复的api请求

问题描述 投票:0回答:1

首先,我还是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仅发出一个可观察的信号,这就是发生的情况,但问题是该函数本身执行了两次,因此我如何制作我的...

android generics rx-java
1个回答
0
投票

我订阅了不止一次

© www.soinside.com 2019 - 2024. All rights reserved.