gpt4 book ai didi

java - Log.e 在拦截器中产生一些问题

转载 作者:行者123 更新时间:2023-12-02 11:58:18 24 4
gpt4 key购买 nike

这是我的拦截器代码,用于未经授权的检查。

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();
}
});
}
}

}

如果我在拦截器中使用Log.e,那么我在Retrofit成功回调中不会得到任何响应。但是 Log.e 在 logcat 中正确打印响应。之后,它不会对 Retrofit 成功回调提供任何回调。它会转到错误回调并给出 IllegalStateException:lined

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

为什么会发生这种情况?谁能解释一下这件事。

提前致谢。

最佳答案

您只能调用 response.body() 1 次。
这样做时,它会消耗内部变量,因此之后它们将为空。
因此,您应该将该调用中的值保存到变量中,然后在从中获取信息/记录它时使用该值。

关于java - Log.e 在拦截器中产生一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47443372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com