У меня есть API для запроса некоторых json-данных с сервера. Для упрощения моего кода я обернул свой API в RxJava Single. Также у меня есть список с необходимыми идентификаторами сущностей, которые мне нужно сохранить. Я повторяю этот список, беру один идентификатор и пытаюсь получить по нему данные. Он работает для нескольких лиц, но на одну модернизацию не получен ответ. Мы проверили это на бэкэнде и сервер отправил ответ. Кроме того, это не зависит от 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 и возвращаю новый сингл с ошибкой или успехом && data:
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)