改造关闭响应机构

时间:2016-09-14 04:30:57

标签: android retrofit retrofit2 okhttp okhttp3

我一直收到这个错误:

 A connection to ****** was leaked. Did you forget to close a response body?

所以我继续关闭我得到的回复。

response.body().close()

问题是如果response.body()已经转换为自定义类,则没有可用的close方法。我也尝试调用raw并给我一个例外:

fetchSomething.enqueue(new Callback<SomethingClass>() {
            @Override
            public void onResponse(Call<SomethingClass> call, Response<SomethingClass> response) {


                //Closes the response body
                response.raw().body().close(); //<--- gives illegalStateException

            }

            @Override
            public void onFailure(Call<SomethingClass> call, Throwable t) {

            }
        });

    }

如何关闭它?

1 个答案:

答案 0 :(得分:0)

如上所述here,您可以执行以下操作

 ResponseBody body =  response.raw().body();
                if (response.isSuccessful()) {
                    return body.string(); // Closes automatically.
                } else {
                    body.close();
                    return null;
                }

ResponseBody body = response.raw().body();
try {
  ...
} finally {
 body.close();
}

希望它能解决您的问题。