Dzięki Retrofit 2 możesz ustawić pełny adres URL w adnotacji metody usługi, na przykład:
public interface APIService {
@GET("http://api.mysite.com/user/list")
Call<Users> getUsers();
}
Jednak w mojej aplikacji adresy URL moich usług internetowych nie są znane w czasie kompilacji, aplikacja pobiera je w pobranym pliku, więc zastanawiam się, jak mogę użyć Retrofit 2 z pełnym dynamicznym adresem URL.
Próbowałem ustawić pełną ścieżkę, taką jak:
public interface APIService {
@GET("{fullUrl}")
Call<Users> getUsers(@Path("fullUrl") fullUrl);
}
new Retrofit.Builder()
.baseUrl("http://api.mysite.com/")
.build()
.create(APIService.class)
.getUsers("http://api.mysite.com/user/list"); // this url should be dynamic
.execute();
Ale tutaj Retrofit nie widzi, że ścieżka jest w rzeczywistości pełnym adresem URL i próbuje pobrać http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist
Masz jakąś wskazówkę, jak mógłbym użyć Retrofit z tak dynamicznym adresem URL?
Dziękuję Ci
Odpowiedzi:
Myślę, że używasz go w niewłaściwy sposób. Oto fragment dziennika zmian :
Więc twój interfejs powinien wyglądać tak:
źródło
Chciałem podmienić tylko część adresu url, a przy takim rozwiązaniu nie muszę podawać całego urla tylko część dynamiczną:
źródło
Możesz użyć zakodowanej flagi w
@Path
adnotacji:/
z%2F
.?
to%3F
jednak przed zastąpieniem przez , więc nadal nie możesz przekazywać dynamicznych ciągów zapytań.źródło
Od Retrofit 2.0.0-beta2, jeśli masz usługę odpowiadającą w formacie JSON z tego adresu URL: http: // myhost / mypath
Następujące elementy nie działają:
Ale to jest w porządku:
źródło
Możesz użyć tego:
Więcej informacji można znaleźć w dokumentacji https://square.github.io/retrofit/
źródło
Krok 1
Krok 2 Aby uzyskać najlepsze praktyki, zdefiniuj klasę instancji do modernizacji: -
} Krok 3 zdefiniuj w swoim działaniu: -
źródło
Biblioteka RetrofitHelper napisana w kotlin, pozwoli ci wykonywać wywołania API, używając kilku linii kodu i możesz używać różnych adresów URL, nagłówków i parametrów w każdym wywołaniu.
Dodaj wiele adresów URL w swojej klasie aplikacji w następujący sposób:
Następnie użyj adresu URL, którego potrzebujesz w rozmowie:
Więcej informacji można znaleźć w dokumentacji
źródło
Dynamiczny adres URL z metodą Get and Post w Retrofit (MVVM)
Interfejs usługi modernizacji:
Klasa usługi MVVM:
i klasy Retrofit Client
na przykład This is url: https://gethelp.wildapricot.com/en/articles/549-changing-your
baseURL: https://gethelp.wildapricot.com
Remaining @Url: / pl / article / 549-change-your (czyli zalicza się w klasie usług retro)
źródło
źródło
Jeśli masz już konfigurację kodu i nie chcesz wprowadzać zmian w różnych interfejsach, które możesz, użyj rozwiązania opisanego w tym linku . Głównym punktem jest metoda,
changeApiBaseUrl
która aktualizuje adres URL i odtwarza narzędzie do tworzenia modernizacji.Możesz go użyć w następujący sposób:
źródło