Может ли вызов .body () из ответа Retrofit в try body вернуть ноль? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть простой фрагмент кода, как показано ниже:

Sub sub = null;

try {
    Response<Sub> response = MyRestApi.getInstance().getSub().execute();
    sub = response.body(); // Does variable response is always non null?
} catch (IOException e) {
    e.printStackTrace();
}

//
// ... further operations on sub
// 

Все, что я хочу знать, это то, могу ли я безопасно позвонить .body() на response в try теле?

Я пытался просмотреть информацию о моем методе .getSub(), вызвав CTRL-Q в Android Studio, но у меня есть единственная строка

Inferred annotations: @org.jetbrains.annotations.NotNull

Я думаю, этого должно быть достаточно, чтобы убедить меняоб этом, но я должен был спросить и быть на 100% уверенным.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Может быть нулевым, даже если запрос успешен, как описано в w3c:

"Данные ответа. Дополнительная информация может следовать в формате тела сообщения MIME. Значимость данныхзависит от кода состояния.

Тип содержимого, используемый для данных, может быть любым типом содержимого, который клиент выразил в своей способности принять, либо text / plain, либо text / html.всегда можно предположить, что клиент может обрабатывать текст / обычный текст и текст / html. "

ссылка: https://www.w3.org/Protocols/HTTP/Response.html

В Retrofit метод тела определяется как Nullable

@ Nullable public T body () Десериализованное тело ответа успешного ответа.

https://square.github.io/retrofit/2.x/retrofit/retrofit2/Response.html

0 голосов
/ 17 декабря 2018

Может быть нулем, если ответ не успешен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...