2017-08-31 81 views
0

我想在使用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,在那里我通过该凸出ectID并返回内容。我想知道的是如何使用Interceptor调用方法,并能够从请求中获取结果。

回答

0

我能够通过创建一个名为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()); 
      } 
     }); 
    }