Debuggin Retrofit 2 - 预期BEGIN_OBJECT但是在第1行第1列路径处是STRING

时间:2015-10-01 18:54:29

标签: android retrofit

我收到了这个错误:

Expected BEGIN_OBJECT but was STRING at line 1 column 1 path

在另一个stackoverflow问题中,他们说当我应该是一个对象时,我正在接收一个数组。 但我的直觉是我没有收到任何东西,但是我无法看到我的json进行调试。

我正在尝试记录收到的json,看看发生了什么,因为我的代码中没有看到错误。

我编的是here

OkHttpClient client = new OkHttpClient();

    client.interceptors().add(new Interceptor() {
        @Override
        public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            Buffer buffer = new Buffer();
            request.body().writeTo(buffer);
            String body = buffer.readUtf8();
            Request.Builder builder = chain.request().newBuilder();
            String credential = Credentials.basic(user, pass);
            builder.addHeader("Authorization", credential).build();
            Response response = chain.proceed(builder.build());
            return response;
        }
    });
    return client;

但是我在request.body() ...

中得到了NullPointerException

我的下一步调试是什么???

2 个答案:

答案 0 :(得分:0)

我会使用如下的日志语句设置改装拦截器:

Request request = chain.request();
Log.e(String.format("Request: %s", request.body().toString()));

那应该给你一个json体的错误日志。

答案 1 :(得分:0)

您正在修改您的请求,但听起来您正在尝试记录服务器响应。为此,您需要调用chain.proceed()来获取响应,然后记录body。{/ p>

client.interceptors().add(new Interceptor() {
    @Override
    public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
        com.squareup.okhttp.Response response = chain.proceed(chain.request());
        String content = response.body().string();
        Log.d("interceptor", "intercepted res = " + content);
        return response.newBuilder()
                .body(ResponseBody.create(response.body().contentType(), content))
                .build();
    }
});