android - Retrofit 2.0.0 Beta2 OkHttpClient 拦截器抛出 StackOverFlowError

标签 android stack-overflow retrofit okhttp

我正在尝试构建一个用于登录的拦截器。这是我的以下代码:

OkHttpClient client = new OkHttpClient();
        client.interceptors().add(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request();
                String authToken = SharedPrefsManager.get(context).getAccessToken();
                request.newBuilder()
                        .addHeader("Authorization", "Bearer " + authToken)
                        .addHeader("Content-Type", "application/json")
                .build();


                return intercept(chain);
            }
        });

我的 GSON:

  Gson gson = new GsonBuilder()
                .setExclusionStrategies(new ExclusionStrategy() {
                    @Override
                    public boolean shouldSkipField(FieldAttributes f) {
                        return f.getDeclaringClass().equals(RealmObject.class);
                    }

                    @Override
                    public boolean shouldSkipClass(Class<?> clazz) {
                        return false;
                    }
                })
                .create();

我的改造RestAdapter:

   Retrofit restAdapter = new Retrofit.Builder()
                .baseUrl(Endpoints.ENDPOINT_BASE_URL+Endpoints.ENDPOINT_VERSION)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();

        apiInterface = restAdapter.create(ApiService.class);

然而,当我使用以下方式调用此服务时:

            try {
                    Account myAccount = ApiInterface.getKidMixClient(getActivity()).getAccountDetails().execute().body();
                    callbacks.showDashboard(myAccount.getUser());
                } catch (IOException e) {
                    e.printStackTrace();
                }

我收到一个 StackOverFlowError,以下 Logcat 输出:

    java.lang.StackOverflowError: stack size 8MB
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at java.util.ArrayList.<init>(ArrayList.java:71)
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at com.squareup.okhttp.Headers$Builder.<init>(Headers.java:215)
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at com.squareup.okhttp.Headers.newBuilder(Headers.java:121)
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at com.squareup.okhttp.Request$Builder.<init>(Request.java:137)
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at com.squareup.okhttp.Request$Builder.<init>(Request.java:120)
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at com.squareup.okhttp.Request.newBuilder(Request.java:94)
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at com.kidmixapp.commoncode.networking.ApiInterface$1.intercept(ApiInterface.java:39)
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at com.kidmixapp.commoncode.networking.ApiInterface$1.intercept(ApiInterface.java:45)
10-08 16:42:39.013 21279-21279/com.kidmixapp.kidmixchild E/AndroidRuntime:     at com.kidmixapp.commoncode.networking.ApiInterface$1.intercept(ApiInterface.java:45)

最佳答案

您需要使用 chain.proceed(request),您正在做的是递归调用相同的 intercept 方法。

关于android - Retrofit 2.0.0 Beta2 OkHttpClient 拦截器抛出 StackOverFlowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33026490/

相关文章:

android - RetrofitError 异常

java - 来自 ok Retrofit 响应的图像的空模型

java - GSON 抛出 Expected BEGIN_ARRAY but was BEGIN_OBJECT 错误

Android fragment 事务 - 替换 fragment 会使旧 fragment 处于奇怪状态

java - 为什么不能以编程方式滚动 ScrollView?

android - 带有操作栏选项菜单项的图像图标

c - 为什么 putenv(buf) 无法正常工作,因为 memcpy(buf + 92, "\x00\x14\xe4\xf7", 4) 将 a\x00 字节复制到 buf ?

c# - 为什么调用不同的号码会抛出栈溢出异常?

android - FirebaseRemoteConfig.fetch() 不会每次都触发 OnCompleteListener

java - 将一个数组列表添加到另一个数组列表时出现 StackOverflow 异常