【问题标题】:Using Interceptors to customize header in Retrofit calls在 Retrofit 调用中使用拦截器自定义标头
【发布时间】:2017-09-01 03:43:09
【问题描述】:

我正在尝试在使用 Retrofit 时使用拦截器来添加标题。我想我已经以正确的方式创建了我的拦截器,但我不知道应该怎么做才能调用它并将它与我的 GET Retrofit 方法连接起来。

这是我的拦截器:

public class HeaderInterceptor
            implements Interceptor {
        @Override
        public Response intercept(Chain chain)
                throws IOException {
            Request request = chain.request();
            request = request.newBuilder()
                    .addHeader(Constants.VersionHeader.NAME, Constants.VersionHeader.VALUE)
                    .addHeader("Authorization", "Bearer " + token)
                    .addHeader("Origin","MY URL")
                    .build();
            Response response = chain.proceed(request);
            return response;
        }
    }

这是我的界面:

public interface CategoryService {

    @GET("/v3/projects/{projectId}/categories/")
    Call<ArrayList<Category2>> getProjectCategories(@Path("projectId") String projectId);
}

我也有这个客户端,考虑到我正在使用拦截器,我不知道是否应该再使用它:

public class CategoryClient {

    public static final String BASE_URL = "MY URL";
    private static Retrofit retrofit = null;


    public static Retrofit getClient() {
        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

所以我有这个 GET 方法 getProjectCategories,我在其中传递 projectID 并返回内容。我想知道的是如何使用 Interceptor 调用方法并能够从请求中获取结果。

【问题讨论】:

    标签: android retrofit2 interceptor


    【解决方案1】:

    我能够通过创建一个名为 SendNetworkRequest 的方法来解决我的问题,该方法将 projectId 作为参数发送,并且在这个类中我创建了我的 OkHttpClient、我的拦截器和我的改造构建器来处理我需要的一切。

    private void SendNetworkRequest(String projectID) {
    
            OkHttpClient.Builder okhttpBuilder = new OkHttpClient.Builder();
    
            okhttpBuilder.addInterceptor(new Interceptor() {
                @Override
                public okhttp3.Response intercept(Chain chain) throws IOException {
    
                    Request request = chain.request();
    
                    Request.Builder newRequest = request.newBuilder().header("Authorization", "Bearer " + token);
    
                    return chain.proceed(newRequest.build());
                }
            });
    
            Retrofit.Builder builder = new Retrofit.Builder()
                    .baseUrl("MY URL")
                    .client(okhttpBuilder.build())
                    .addConverterFactory(GsonConverterFactory.create());
    
            Retrofit retrofit = builder.build();
    
            CategoryService category = retrofit.create(CategoryService.class);
            Call<ArrayList<Category2>> call = category.getProjectCategories(projectID, token);
            call.enqueue(new Callback<ArrayList<Category2>>() {
                @Override
                public void onResponse(Call<ArrayList<Category2>> call, Response<ArrayList<Category2>> response) {
    
                    listCategories = response.body();
                    listCategories.remove(response.body().size() - 1);
                    if (response.body().size() > 0){
                        add_category_layout.setVisibility(View.VISIBLE);
                        layout_bar.setVisibility(View.VISIBLE);
                        message_body.setVisibility(View.INVISIBLE);
                        message_title.setVisibility(View.INVISIBLE);
                        edit_image.setVisibility(View.INVISIBLE);
                        adapter2 = new CategoryAdapter2(getApplicationContext(), listCategories);
                        recyclerView.setAdapter(adapter2);
                        recyclerView.setVisibility(View.VISIBLE);
                    }
                }
    
                @Override
                public void onFailure(Call<ArrayList<Category2>> call, Throwable t) {
                    // Log error here since request failed
                    Log.e(TAG, t.toString());
                }
            });
        }
    

    【讨论】:

      猜你喜欢
      • 2016-01-02
      • 2018-05-25
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 2012-08-18
      • 2018-03-04
      相关资源
      最近更新 更多