2013-07-10 18 views
26

我使用Square的Retrofit庫進行短期網絡調用。我在每個請求中都包含幾條數據,作爲@Query params。像這樣:有沒有一種方法可以設置基本請求參數以包含在使用Square的Retrofit庫進行的每個請求中?

@GET("/thingOne.php") 
void thingOne(
     @Query("app_version") String appVersion, 
     @Query("device_type") String deviceType, 
     Callback<Map<String,Object>> callback 
); 

@GET("/thingTwo.php") 
void thingTwo(
     @Query("app_version") String appVersion, 
     @Query("device_type") String deviceType, 
     Callback<Map<String,Object>> callback 
); 

它的麻煩必須定義appVersiondeviceTypeInterface列出每一個端點。有沒有辦法設置每個請求應包含的基本參數集?類似於我們如何設置常見的Authorization Header

RestAdapter restAdapter = new RestAdapter.Builder() 
    .setServer("...") 
    .setRequestHeaders(new RequestHeaders() { 
     @Override 
     public List<Header> get() { 
      List<Header> headers = new ArrayList<Header>(); 
       Header authHeader = new Header(
        "Authorization", "Bearer " + token); 
       headers.add(authHeader); 
      } 
      return headers; 
     } 
    }) 
    .build(); 
this.service = restAdapter.create(ClientInterface.class); 

回答

54

可以確保所有的請求有這些查詢參數通過添加自定義RequestInterceptor您RestAdapter

RequestInterceptor requestInterceptor = new RequestInterceptor() 
{ 
    @Override 
    public void intercept(RequestFacade request) { 
     request.addQueryParam("app_version", "Version 1.x"); 
     request.addQueryParam("device_type", "Samsung S4"); 
    } 
}; 

restAdapter.setRequestInterceptor(requestInterceptor) 
+1

是[這](http://developer.android.com/reference/org/apache /http/HttpRequestInterceptor.html)你在說什麼?我似乎無法找到一個名爲RequestInterceptor的類的引用。或者到RequestFacade。而RestAdapter沒有'setRequestInterceptor'方法。你能提供更多的細節嗎? –

+0

您必須擁有較舊版本的Retrofit。如果您將其更新到版本1.1.1,則應該看到它們。 http://square.github.io/retrofit/javadoc/retrofit/RequestInterceptor.html – Erich

+1

@kdubb:我如何爲身體做這件事?我有一個接受json負載的POST。謝謝! – dannyroa

相關問題