Android网络请求异常处理时神奇的坑:关于httpException.response().errorBody().string()的值只能获取一次,再次获取为空的坑。

在请求网络错误的回调中遇到了一个有意思的坑:
public void onError(Throwable e) {
    if (e instanceof HttpException) {
        HttpException httpException = (HttpException) e;
        ResponseBody responseBody = httpException.response().errorBody();
        if (responseBody != null) {
            //☆★☆重点在这:经测试表明,responseBody.string()的值只能获取一次,获取一次之后再获取都为空。
            //错误的做法
            LogUtil.d(TAG,responseBody.string()+"1");//第一次获取有值,没问题。
            LogUtil.d(TAG,responseBody.string()+"2");//这里开始responseBody.string()获取到的值为空。
            JSONObject jsonObject = new JSONObject(responseBody.string());//这里就会得到一个空的jsonObject
            String status = (String) jsonObject.get("status");
            //正确的做法
            String json = responseBody.string();//第一次获取就保存下来
            LogUtil.d(TAG,json);
            JSONObject jsonObject = new JSONObject(json);
            String status = (String) jsonObject.get("status");
        }
    }
}

你可能感兴趣的:(Android网络请求异常处理时神奇的坑:关于httpException.response().errorBody().string()的值只能获取一次,再次获取为空的坑。)