Moja apiPath jest w pełni dynamiczna. Mam elementy zawierające pola takie jak "ipAddress" i "SSLprotocol". Na ich podstawie można zbudować mój URL:Jak skonfigurować Retrofit bez podstawy?
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;
}
Więc mój protokół + adres może być: http: // + 192.168.0.01:8010 = http://192.168.0.01:8010
I chciałbym używać go tak:
@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);
Więc pełna ścieżka do authenticateUser byłoby http://192.168.0.01:8010/json/token.php - na przykład.
Oznacza to, że nie potrzebuję żadnej bazy, ponieważ sam tworzę całą bazę BasePath w zależności od serwera, z którym chcę się połączyć.
Moja konfiguracja modernizacyjny jest:
@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();
}
Jeśli usunąć baseURL następnie otrzymuję błąd, który wymagany jest ten parametr. Więc mogę ustawić apiBasePath do:
public String getApiBasePath() {
return "";
}
A potem dostaję błąd natychmiast po utworzeniu modernizacji instancję:
java.lang.IllegalArgumentException: Illegal URL:
jak go rozwiązać?
Czy pozwala używać "http: //" jako adresu bazowego? – TheoKanning
Hmm nie, dostaję: java.lang.IllegalArgumentException: Nielegalny URL: http: // – F1sher
można użyć adnotacji @Url. Ale będziesz musiał zbudować każdy URL całkowicie – Blackbelt