Android Studio okhttp 3:使用了“ResponseBody”,但未使用“try”-with-resources语句

mwkjh3gx  于 2023-03-24  发布在  Android
关注(0)|答案(1)|浏览(947)

我正在使用okhttp3,我试图像这样获得响应errorBody:

ResponseBody errorBody = response.errorBody();

Android Studio给了我以下警告:

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

如何正确获取errorBody

92vpleto

92vpleto1#

从okhhtp 3的文档:

**响应体必须关闭。**每个响应体都有一个有限的资源作为后盾,比如socket(实时网络响应)或打开的文件(用于缓存响应)。如果不关闭响应体,将导致资源泄漏,最终可能导致应用程序变慢或崩溃。

来自Oracle的文档:
try-with-resources语句是一个声明一个或多个资源的try语句。资源是一个对象,在程序使用完它后必须关闭。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
}

相关问题