2015-09-07 18 views
0

我正在使用Retrofit和RequestInterceptor。改進更改RequestInterceptor

問題是我發送的每個請求都有不同的Header「Accept」,所以我需要在每次創建請求時都使用RequestInterceptor更改「Accept」標頭。

到目前爲止,我正在做這樣的:

private void updateApiMethodsFor(final String linkName) { 
    JacksonConverter jacksonConverter = new JacksonConverter(); 

    RestAdapter restAdapter = new RestAdapter 
      .Builder() 
      .setLogLevel(RestAdapter.LogLevel.FULL) 
      .setEndpoint(ROOT_URL) 
      .setConverter(jacksonConverter) 
      .setRequestInterceptor(new RequestInterceptor() { 
       @Override 
       public void intercept(RequestFacade request) { 
        ApiIndexLink1 apiIndexLink = getIndexLinkForName(linkName); 
        if (apiIndexLink != null) { 
         request.addHeader("Accept", apiIndexLink.getContentTypes().getContentTypeList().get(1)); 
        } 
       } 
      }) 
      .build(); 

    apiMethods = restAdapter.create(BCApiMethods.class); 
} 

的問題是,如果我把這每一次之前,我提出一個要求,實在是太貴了。有沒有更好的方法來解決這個問題?

回答

1
RequestInterceptor myRequestInterceptor = new RequestInterceptor() { 
       @Override 
       public void intercept(RequestFacade request) { 
        ApiIndexLink1 apiIndexLink = getIndexLinkForName(linkName); 
        if (apiIndexLink != null) { 
         request.addHeader("Accept", apiIndexLink.getContentTypes().getContentTypeList().get(1)); 
        } 
       } 
      }; 

private void updateApiMethodsFor(final String linkName) { 
    JacksonConverter jacksonConverter = new JacksonConverter(); 
    RestAdapter restAdapter = new RestAdapter 
      .Builder() 
      .setLogLevel(RestAdapter.LogLevel.FULL) 
      .setEndpoint(ROOT_URL) 
      .setConverter(jacksonConverter) 
      .setRequestInterceptor(myRequestInterceptor) 
      .build(); 

    apiMethods = restAdapter.create(BCApiMethods.class); 
} 

在這裏,瓶頸是每次創建一個新的攔截器。你可以通過攔截器變量來克服這個問題