2016-04-19 18 views
15

मैं Google मानचित्र API द्वारा आवश्यक मान सेट करने के लिए क्वेरी पैरामीटर का उपयोग कर रहा हूं।रेट्रोफिट 2 - यूआरएल क्वेरी पैरामीटर

समस्या यह है कि मुझे पहले क्वेरी पैरामीटर के लिए & साइन की आवश्यकता नहीं है।

@GET("/maps/api/geocode/json?") 
    Call<JsonObject> getLocationInfo(@Query("address") String zipCode, 
              @Query("sensor") boolean sensor, 
              @Query("client") String client, 
              @Query("signature") String signature); 

रेट्रोफिट उत्पन्न करता है:

&address=90210&sensor=false&client=gme-client&signature=signkey 

जो कॉल असफल का कारण बनता है जब मैं यह

address=90210&sensor=false&client=gme-client&signature=signkey 

मैं इसे ठीक करना कैसे करने की आवश्यकता है?

उत्तर

20

यदि आप @GET("foobar?a=5") निर्दिष्ट करते हैं, तो @Query("b")& का उपयोग करके जोड़ा जाना चाहिए, foobar?a=5&b=7 जैसे कुछ का उत्पादन करना चाहिए।

यदि आप @GET("foobar") निर्दिष्ट करते हैं, तो पहले @Query को ? का उपयोग करके जोड़ा जाना चाहिए, foobar?b=7 जैसे कुछ का उत्पादन करना चाहिए।

इस तरह रेट्रोफिट काम करता है।

जब आप @GET("foobar?") निर्दिष्ट करते हैं, रेट्रोफिट सोचता है कि आप पहले से ही कुछ क्वेरी पैरामीटर दी, और & का उपयोग कर अधिक क्वेरी पैरामीटर जोड़ देता है।

? हटाएं, और आपको वांछित परिणाम मिल जाएगा।

+0

यह काम करता है। क्या आपके पास यूआरएल संरचित और सभी प्रकार के पैरामीटर कैसे हैं, इस पर कोई अच्छा संसाधन है? मुझे यकीन नहीं है कि खोज करने के लिए एक अच्छा कीवर्ड क्या है। – Alan

+1

'यूआरएल' के लिए खोजें, और आपको https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax मिलेगा – Andreas

7

मैं फिर से निकालने के लिए नया हूं और मैं इसका आनंद ले रहा हूं। तो यहां उन लोगों के लिए समझने का एक आसान तरीका है जो एक से अधिक प्रश्नों से पूछना चाहते हैं: द? और & स्वचालित रूप से आपके लिए जोड़े गए हैं।

इंटरफ़ेस:

public interface IService { 

     String BASE_URL = "https://api.test.com/"; 
     String API_KEY = "SFSDF24242353434"; 

     @GET("Search") //i.e https://api.test.com/Search? 
     Call<Products> getProducts(@Query("one") String one, @Query("two") String two,  
           @Query("key") String key) 
} 

यह इस तरह से बुलाया जाएगा। ध्यान दें कि आपने पहले से ही बाकी कोड किया है।

Call<Results> call = service.productList("Whatever", "here", IService.API_KEY); 

उदाहरण के लिए जब एक प्रश्न दिया जाता है, यह इस तरह दिखेगा।

//-> https://api.test.com/Search?one=Whatever&two=here&key=SFSDF24242353434 
0

सार्वजनिक इंटरफ़ेस IService {

String BASE_URL = "https://api.demo.com/"; 

    @GET("Login") //i.e https://api.demo.com/Search? 
    Call<Products> getUserDetails(@Query("email") String emailID, @Query("password") String password) 

}

यह इस तरह से बुलाया जाएगा। ध्यान दें कि आपने पहले से ही बाकी कोड किया है।

कॉल कॉल = service.authenticateUser ("[email protected]", "पासवर्ड @ 123");

उदाहरण के लिए जब कोई प्रश्न लौटाया जाता है, तो यह ऐसा दिखाई देगा।

// ->https://api.demo.com/[email protected]&[email protected]

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