2016-01-17 10 views
5

के साथ रेट्रोफिट कैसे सेट करें मेरा एपीपाथ पूरी तरह गतिशील है। मेरे पास ऐसे क्षेत्र हैं जिनमें हमें "ipAddress" और "SSLprotocol" फ़ील्ड हैं। उन पर आधारित मैं अपने यूआरएल का निर्माण कर सकते हैं:कोई आधार यूआरएल

private String urlBuilder(Server server) { 
    String protocol; 
    String address = ""; 

    if (AppTools.isDeviceOnWifi(activity)) { 
     address = serverToConnect.getExternalIp(); 
    } else if (AppTools.isDeviceOnGSM(activity)) { 
     address = serverToConnect.getInternalIp(); 
    } 

    if (server.isShouldUseSSL()) { 
     protocol = "https://"; 
    } else { 
     protocol = "http://"; 
    } 
    return protocol + address; 
} 

तो मेरी प्रोटोकॉल + पता हो सकता है: http: // + 192.168.0.01:8010 = http://192.168.0.01:8010

और मैं उस तरह इसका इस्तेमाल करना चाहते हैं:

@FormUrlEncoded 
@POST("{fullyGeneratedPath}/json/token.php") 
Observable<AuthenticationResponse> authenticateUser(
      @Path("fullyGeneratedPath") String fullyGeneratedPath, 
      @Field("login") String login, 
      @Field("psw") String password, 
      @Field("mobile") String mobile); 

authenticateUser के लिए तो पूरा पथ http://192.168.0.01:8010/json/token.php होगा - उदाहरण के लिए।

इसका मतलब है कि मुझे किसी भी बेसपैथ की आवश्यकता नहीं है क्योंकि मैं सर्वर पर निर्भर करता हूं कि मैं उस सर्वर पर निर्भर करता हूं जिसे मैं कनेक्ट करना चाहता हूं।

मेरे पुराना वापस सेटअप है:

@Provides 
@Singleton 
Retrofit provideRetrofit(OkHttpClient okHttpClient, 
      Converter.Factory converterFactory, 
      AppConfig appConfig) { 
    Retrofit.Builder builder = new Retrofit.Builder(); 
    builder.client(okHttpClient) 
      .baseUrl(appConfig.getApiBasePath()) 
      .addConverterFactory(converterFactory) 
      .addCallAdapterFactory(RxJavaCallAdapterFactory.create()); 

    return builder.build(); 
} 

अगर मैं baseurl को दूर तो मैं त्रुटि है कि इस पैरामीटर के लिए आवश्यक है मिलता है। तो मैं करने के लिए मेरे apiBasePath सेट:

public String getApiBasePath() { 
    return ""; 
} 

और फिर तुरंत बाद मैं पुराना वापस उदाहरण बनाने मैं त्रुटि मिलती है:

java.lang.IllegalArgumentException: Illegal URL: 

इसे कैसे हल करने के लिए?

+0

क्या यह आपको "http: //" को बेस यूआरएल के रूप में उपयोग करने देता है? – TheoKanning

+0

हम्म नहीं, मुझे मिलता है: java.lang.IllegalArgumentException: अवैध यूआरएल: http: // – F1sher

+0

आप @ यूआरएल एनोटेशन का उपयोग कर सकते हैं। लेकिन आपको हर यूआरएल को पूरी तरह से – Blackbelt

उत्तर

16

source (नई यूआरएल अवधारणा को हल करने) आप पोस्ट अनुरोध में बस पूरा पथ निर्दिष्ट कर सकते हैं।

इसके अलावा हम भी एक पूर्ण URL @Post में रेट्रोफिट 2.0 में घोषणा कर सकते हैं:

public interface APIService { 

    @POST("http://api.nuuneoi.com/special/user/list") 
    Call<Users> loadSpecialUsers(); 

} 

आधार URL इस मामले के लिए नजरअंदाज कर दिया जाएगा।

0

यदि आप एक नया RestAdapter उदाहरण बनाने के लिए ठीक हैं, तो हर बार जब आप एपीआई कॉल करना चाहते हैं, तो आप बेस यूआरएल के साथ एक पैरामीटर के रूप में एक नया एडाप्टर बना सकते हैं।

Using absolute URLs with Retrofit

0

हाँ आप कर सकते हैं। मैं इस तरह किया है:

public APIHelper(BaseActivity activity) { 

    String url = Common.getAPIUrl(); 

    RestAdapter restAdapter = new RestAdapter.Builder() 
      .setLogLevel(RestAdapter.LogLevel.FULL) 
      .setEndpoint(url) 
      .build(); 

    methods = restAdapter.create(IAppService.class); 
} 

मूल रूप से आप पुराना वापस की वस्तु बनाने के लिए एक बार आप अंत बिंदु यूआरएल पता होना जरूरत है। मुझे लगता है कि कोड स्वयं स्पष्टीकरण के रूप में कोई और स्पष्टीकरण की आवश्यकता नहीं है।

मान लीजिए कि केवल बेस यूआरएल बदल रहा है।

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