在try body中从Response Retrofit调用.body()是否会返回null?

时间:2018-12-17 11:44:41

标签: android retrofit

我有如下简单的代码段:

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打电话吗?

我试图通过在Android Studio中调用.getSub()来预览我的方法信息CTRL-Q,但我只有一行

Inferred annotations: @org.jetbrains.annotations.NotNull

我相信这足以说服我,但我必须提出要求并百分百确定。

2 个答案:

答案 0 :(得分:0)

如果响应不成功,它可能为null。

答案 1 :(得分:0)

即使请求成功,它也可能为null,如w3c所述:

  

“响应数据可能会附带其他信息,格式为   MIME邮件正文。数据的重要性取决于状态   代码。

     

用于数据的Content-Type可以是   客户已经表达了接受或发短信/纯文本的能力,或者   文字/ html。也就是说,总是可以假设客户端可以处理   文字/纯文字和文字/ html。”

参考:https://www.w3.org/Protocols/HTTP/Response.html

在翻新中,body方法定义为Nullable

  

@Nullable public T body()一个对象的反序列化响应体   成功的回应。

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