我有一个用于从服务器请求一些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)