Дооснащение не получает ответ по запросу - PullRequest
0 голосов
/ 27 июня 2019

У меня есть 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)
...