Есть ли способ использовать переменную в @get из retrofitApi?

#android #kotlin #retrofit

#Android #kotlin #модернизация

Вопрос:

У меня есть этот код :

 package com.example.finalv2.networking

import retrofit2.Call
import retrofit2.http.GET
import com.example.finalv2.it1



private var argument: String = it1
interface RetrofitAPI {
    @GET(argument)
    fun getInformations(): Call<ArrayList<Information>>

}
  

И я хочу использовать свой аргумент var, но для модификации требуется const. Как это сделать?

Комментарии:

1. Параметры аннотаций должны быть константами времени компиляции. Это не доработка, это компилятор kotlin. Если вам нужно выполнить GET по URL-адресу, который вы узнаете только во время компиляции, вы не можете использовать Retrofit . Вы можете придерживаться OkHttp

Ответ №1:

Значения аннотаций разрешаются статически, что означает, что они должны быть постоянными. Вы можете передать URL-адрес аргумента переменной, используя @Url аннотацию для аргумента функции.

 interface RetrofitAPI {
    @GET
    fun getInformations(@Url url: String): Call<ArrayList<Information>>
}
  

Ответ №2:

Вы можете сделать это, добавив параметр аннотации @Path в вызов функции следующим образом:

 @GET("/image/{argument}")
fun getInformations(@Path("argument") argument: String): Call<ArrayList<Information>>
  

Например, если функция вызывается как:

 getInformations("abc")
  

конечный URL-адрес, на который будет отправлен запрос, должен быть

 BASE_URL  "/image/abc"
  

Чтобы узнать больше, ознакомьтесь с этой официальной веб-страницей документации,
https://square.github.io/retrofit/2.x/retrofit/index.html?retrofit2/http/Path.html