2013-07-10 4 views
26

मैं अल्पकालिक नेटवर्क कॉल के लिए स्क्वायर की रेट्रोफिट लाइब्रेरी का उपयोग कर रहा हूं। डेटा के कुछ टुकड़े हैं जिन्हें मैं प्रत्येक अनुरोध पर @Query पैराम्स के रूप में शामिल करता हूं। इसलिए जैसा:क्या स्क्वायर रेट्रोफिट लाइब्रेरी के साथ किए गए प्रत्येक अनुरोध में आधार अनुरोध पैरामीटर सेट करने का कोई तरीका है?

@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 
); 

यह हर एक Interface में उल्लिखित endpoint के लिए appVersion और deviceType को परिभाषित करने के लिए बोझिल है। क्या पैरामीटर का आधार सेट सेट करने का कोई तरीका है जिसे प्रत्येक अनुरोध के साथ शामिल किया जाना चाहिए? कुछ समान है कि हम एक आम 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

आप सुनिश्चित कर सकते हैं सभी अनुरोधों को इन क्वेरी पैरामीटर है अपने 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

के लिए एक कस्टम RequestInterceptor जोड़कर है [इस] (http://developer.android.com/reference/org/apache /http/HttpRequestInterceptor.html) आप किस बारे में बात कर रहे हैं? मुझे RequestInterceptor नामक कक्षा के संदर्भ में प्रतीत नहीं होता है। या अनुरोध Facade करने के लिए। और RestAdapter में 'setRequestInterceptor' विधि नहीं है। क्या आप कुछ और विवरण प्रदान कर सकते हैं? –

+0

आपके पास रेट्रोफिट का पुराना संस्करण होना चाहिए। यदि आप इसे संस्करण 1.1.1 में अपडेट करते हैं तो आपको उन्हें देखना चाहिए। http://square.github.io/retrofit/javadoc/retrofit/RequestInterceptor.html – Erich

+1

@kdubb: मैं बॉडी के लिए यह कैसे कर सकता हूं? मेरे पास एक पोस्ट है जो एक जेसन पेलोड स्वीकार करता है। धन्यवाद! – dannyroa

संबंधित मुद्दे

 संबंधित मुद्दे