Log.e在Interceptor中创建一些问题

时间:2017-11-22 20:27:32

标签: java android retrofit2 interceptor

这是我的非法检查拦截器代码。

class UnauthorizedInterceptor implements Interceptor {

    private Context context;

    UnauthorizedInterceptor(Context context) {
        this.context = context;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Response response = chain.proceed(request);
        Log.e("response: ", response.body().string()); // creating problem
        ObjectMapper objectMapper = new ObjectMapper();
        ServerResponse serverResponse = objectMapper.readValue(response.body().string(), ServerResponse.class);
        if (serverResponse.getErrorCode() == 401) {
            throw new UnauthorizedException(R.string.unauthorized_user);
        } else {
            return response;
        }
    }

    private class UnauthorizedException extends IOException {

        UnauthorizedException(final int stringRes) {
            super(context.getString(stringRes));
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(context, stringRes, Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

}

如果我在Interceptor中使用Log.e,那么我在Retrofit成功回调中没有得到任何响应。但Log.e正确地在logcat中打印响应。之后,它没有给Retrofit成功回调任何回调。它转到错误回调并给出IllegalStateException:closed

但如果我在拦截器中注释掉Log.e代码,那么它的工作正常。

为什么会这样?任何人都可以解释这件事。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您一次只能拨打SELECT * FROM Table WHERE (CASE WHEN ClientPlants = 621 AND Carriers IN (226) THEN 1 WHEN Carriers IN (226) THEN 1 ELSE 0 END) = 1 ORDER BY ClientPlantsK; 1次 这样做时,它会消耗内部变量,所以之后它们就是空的 因此,您应该将该调用的值保存到变量中,然后在从中获取信息/记录它时使用它。

答案 1 :(得分:0)

这是response.body()方法的文档:

  

如果此响应传递给{@link,则返回非null值   回调#onResponse}或从{@link Call#execute()}返回。响应   机构必须{@linkplain ResponseBody关闭}并且可能被消费   只有一次。

     

从{@ link#cacheResponse},{@ link #networkResponse}和{@link #priorResponse()}返回的响应总是返回null。

我也在添加Github问题链接。这将有助于您更多地解决此问题。

https://github.com/square/okhttp/issues/1240