改造未收到要求的回应

时间:2019-06-27 12:56:22

标签: java android rx-java retrofit2

我有一个用于从服务器请求一些json数据的api。为了简化代码,我将api包装在RxJava Single中。另外,我还有一个列表,其中包含必要的实体ID,需要保存。我迭代此列表,获取一个ID并尝试通过它接收数据。它适用于多个实体,但在一次改装中未收到响应。我们在后端对其进行了检查,并且服务器发送了响应。另外,它不取决于实体的ID。 我的代码如下:

for (int i = 0; i < comparisonResult.getNew().size(); i++) {
    ApiMessageCompareData newMessage = comparisonResult.getNew().get(i);

    ApiMessage newMessage = getItemMessage(newMessage.getMessageId())
        .doOnError(t -> {
            String errorMessage = t.getMessage() + " " + newMessage.getMessageId();
            Log.e("Remote2LocalMessage", errorMessage, t);
        }).blockingGet();

    /// handle received message
}

我需要一个一个地处理这个实体,这就是为什么我使用blockingGet()

这是api调用:

public Single<ApiMessage> getItemMessage(long id) {
    return RetrofitClient.getInstance()
            .getInspectionsService()
            .getItemMessage(id)
            .flatMap(this::handleResultAndMap);
}

我从api收到响应,并返回包含错误或成功&&数据的新Single:

protected <T> Single<T> handleResultAndMap(Response<T> response) {
    if (response.isSuccessful()) {
        return Single.create(emitter -> emitter.onSuccess(response.body()));
    } else {
        String message = "Error on server";
        return Single.create(emitter -> emitter.onError(new Exception(message)));
    }
}

我的api方法如下:

@GET("SomeUrl")
Single<Response<ApiMessage>> getItemMessage(
        @Query("id") long id
);

任何人都有一个主意:这可能是什么?

UPD

在我的日志中,我有一个:

2019-06-27 16:35:49.097 1662-3624/com.pckgname D/OkHttp: --> GET http://SomeUrl?id=161
2019-06-27 16:35:49.097 1662-3624/com.pckgname D/OkHttp: --> END GET

如果Retrofit收到响应,那么它将在第一个日志之后显示此日志:

2019-06-27 16:35:48.967 1662-3624/com.pckgname D/OkHttp: <-- 200 OK http://SomeUrl?id=431 (82ms)
2019-06-27 16:35:48.967 1662-3624/com.pckgname D/OkHttp: <headers>
2019-06-27 16:35:48.968 1662-3624/com.pckgname D/OkHttp: <response-body>
2019-06-27 16:35:48.968 1662-3624/com.pckgname D/OkHttp: <-- END HTTP (146-byte body)

0 个答案:

没有答案