Как установить строку URL-адреса для модификации из Ресурсов - PullRequest
0 голосов
/ 29 мая 2019

Я произвел рефакторинг некоторых частей своего кода, написанного на Kotlin, и склонен помещать URL-адреса в strings.xml, но когда я хочу указать на строку в файле strings.xml в аннотационной части Retrofit, я получаюследующая ошибка.

Аргумент аннотации должен быть константой времени компиляции

Вот мой код:

interface SampleApiService {
    @GET(Resources.getSystem().getString(R.string.sample_url))
    fun getSamples(){
    }
}

Может кто-нибудь сказать, пожалуйстамне что не так?

нашел ответ в следующем посте.

Ответы [ 3 ]

1 голос
/ 29 мая 2019

Как указано в документации, он компилирует ресурсы вашего приложения во время сборки.и обработка аннотации происходит во время компиляции.Таким образом, вы видите, что вы не можете передать строку ресурсов в аннотацию

Инструменты Android SDK компилируют ресурсы вашего приложения в двоичный файл приложения во время сборки.

, вместо этого создайте статическую строковую переменнуюи передать его в аннотации

0 голосов
/ 29 мая 2019

Проблема решена, от Tnx до Модернизация 2 - Динамический URL

Мне пришлось использовать другую метку аннотации для модернизации.

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

Вот результат:

interface SampleApiService {
    @GET
    fun getSamples(
        @Url url: String =
            Resources.getSystem().getString(R.string.sample_url)
    )
            : Deferred<ArrayList<Sample>>

}
0 голосов
/ 29 мая 2019

Исходя из предоставленного примера, можно просто использовать статический URL. Это должно быть аннотировано так, чтобы не использовать какие-либо значения времени выполнения и иметь возможность изменить его во время выполнения:

@GET("{path}")
fun getSamples(@Path("path") path: String) {}

Затем можно загрузить все, что String path из строковых ресурсов, во время выполнения. Когда базовый URL должен быть изменен, может потребоваться перенастройка клиента. Это связано с тем, что это определение interface используется процессором аннотаций для генерации из него уровня абстракции - уже во время компиляции, а не во время выполнения ... при получении литерала жалобы, он должен выглядеть примерно так:

@GET(Constants.SOME_PATH)
fun getSamples() {}

но есть небольшое продвижение по сравнению с жестким кодированием этого String, потому что оно не может быть изменено позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...