okhttp3:'ResponseBody' 在没有'try'-with-resources 语句的情况下使用

问题描述 投票:0回答:1

我正在使用 okhttp3,我正在尝试获取这样的响应 errorBody:

ResponseBody errorBody = response.errorBody();

Android Studio 给我以下警告:

'ResponseBody' used without 'try'-with-resources statement

如何正确获取

errorBody

android android-studio error-handling okhttp
1个回答
0
投票

来自 okhhtp3 的文档:

响应体必须关闭 每个响应主体都由有限的资源支持,如套接字(实时网络响应)或开放式 文件(用于缓存响应)。未能关闭响应主体将 泄漏资源并可能最终导致应用程序变慢 或崩溃。

来自 Oracle 的文档:

try-with-resources 语句是声明一个 或更多资源。资源就像一个必须关闭的对象 程序完成后。尝试资源 声明确保每个资源在结束时关闭 陈述。任何实现 java.lang.AutoCloseable 的对象,它 包括所有实现 java.io.Closeable 的对象,可以用作 一个资源。

所以,你应该像这样使用 errorBody:

try (ResponseBody errorBody = response.errorBody()) {
    if (errorBody != null) {
        String  errorBodyStr = errorBody.string();
        // Do something with the result. E.g. parse the JSON
    } else {
        // Do something if the errorBody is `null`
    }
} catch (IOException e) {
    // TODO
}
© www.soinside.com 2019 - 2024. All rights reserved.