Intereting Posts
Как игнорировать ошибку «избегать ошибок, отличных от стандартных по фрагментам»? Как запустить настройки непосредственно на странице «Беспроводные сети»? Как заставить Proguard игнорировать внешние библиотеки? Android listview ленивая загрузка Почему аппаратное ускорение не работает на моем представлении? Ошибка Eclipse: анализ ошибок … \ android-22 \ android-wear \ armeabi-v7a \ devices.xml Преобразование входного потока в растровое изображение Как лучше воссоздать маркеры / полилинии при повороте телефона (изменение ориентации) ListView с заголовком Использовать атрибут android: padding Поддержание как бесплатных, так и сторонних версий приложения Как определить startMode в AndroidManifest.xml – Использование PhoneGap & JQM Есть ли способ отключения функции автоматического изменения размера Gmail в макете электронной почты? Java.lang.IllegalStateException: не удается выполнить это действие после onSaveInstanceState Как получить токенизатор MultiAutoCompleteTextView, похожий на приложение Facebook?

Модернизация 2 – Динамический URL-адрес

С помощью Retrofit 2 вы можете установить полный URL-адрес в аннотации метода службы, например:

public interface APIService { @GET("http://api.mysite.com/user/list") Call<Users> getUsers(); } 

Однако в моем приложении URL-адрес моих веб-сервисов неизвестен во время компиляции, приложение извлекает их в загруженном файле, поэтому мне интересно, как я могу использовать Retrofit 2 с полным динамическим URL-адресом.

Я попытался установить полный путь, как:

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

Но здесь Retrofit не видит, что путь на самом деле является полным URL-адресом и пытается загрузить http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist

Любой намек на то, как я могу использовать Retrofit с таким динамическим URL-адресом?

спасибо

Solutions Collecting From Web of "Модернизация 2 – Динамический URL-адрес"

Я думаю, вы используете его неправильно. Вот выдержка из журнала изменений :

Новое: аннотация @Url позволяет передавать полный URL-адрес для конечной точки.

Таким образом, ваш интерфейс должен быть таким:

 public interface APIService { @GET Call<Users> getUsers(@Url String url); } 

Начиная с Retrofit 2.0.0-beta2, если у вас есть служба, отвечающая JSON с этого URL-адреса: http: // myhost / mypath

Не работает следующее:

 public interface ClientService { @GET("") Call<List<Client>> getClientList(); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://myhost/mypath") .addConverterFactory(GsonConverterFactory.create()) .build(); ClientService service = retrofit.create(ClientService.class); Response<List<Client>> response = service.getClientList().execute(); 

Но это нормально:

 public interface ClientService { @GET Call<List<Client>> getClientList(@Url String anEmptyString); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://myhost/mypath") .addConverterFactory(GsonConverterFactory.create()) .build(); ClientService service = retrofit.create(ClientService.class); Response<List<Client>> response = service.getClientList("").execute(); 

Я хотел заменить только часть URL-адреса, и с этим решением мне не нужно передавать весь URL-адрес, просто динамическую часть:

 public interface APIService { @GET("users/{user_id}/playlists") Call<List<Playlist> getUserPlaylists(@Path(value = "user_id", encoded = true) String userId); } 

Вы можете использовать закодированный флаг в аннотации @Path :

 public interface APIService { @GET("{fullUrl}") Call<Users> getUsers(@Path(value = "fullUrl", encoded = true) String fullUrl); } 
  • Это предотвратит замену / %2F .
  • Это не спасет вас ? Но вместо этого они заменяются на %3F , поэтому вы не можете передавать динамические строки запросов.