Android Retrofit 2 - GET - error: element value must be a constant expression

Android Retrofit 2 - GET - error: element value must be a constant expression

Ahoj,

mám ve své android aplikaci nastaven GET pro Retrofit2 takto:


@GET(Constants.API_URL + Constants.TYPE)
Call> getApiDatas(@Header("X-AUTH-TOKEN") String token);
.......
Call> call = APIService.getApiDatas(Constants.TOKEN_KEY);
.......


A to funguje. Já však potřebuji do GET dostat dynamickou URL adresu.

Pokud místo statických final proměnných (public static final String)
@GET(Constants.API_URL + Constants.TYPE)

Použiji nestatickou proměnnou zde přes class Variables:
@GET(Constants.API_URL + Constants.TYPE)

Tak dostanu chybu:

error: element value must be a constant expression

@GET(Constants.API_URL + Variables.getType())


Můžete mně někdo poradit, jak do URL GET pro Retrofit2 v Android Studio dostat proměnnou pro dynamickou URL?

Díky

ODPOVĚĎ


Ahoj,

pokud v Android Studio potřebuješ pro android aplikaci využívající Retrofit2 do GET dostat nestatickou proměnnou pro dynamickou URL, tak to udělej takto, funguje to!


@GET
Call> getApiDatas(@Header("X-AUTH-TOKEN") String token, @Url String url);
.......
Call> call = APIService.getApiDatas(Constants.TOKEN_KEY, Constants.TYPE + Variables.getType());
.......
Jak se ti článek líbil?

Komentáře (1)

OL3G
Ahoj,

dodatek - jak lze posílat requesty když používáme android retrofit a chceme do url předávat dynamicky parametry.

Endpoint má třeba tento tvar a chceme dynamicky dodávat param "barcode" :
http://192.168.35.205:8001/api/endpoint/get?barcode=B0002

1.) předávání parametrů "barcode=B0002" přes anotaci
-----------
String endpoint = Constants.URL+"endpoint/get";
Call<List<ApiData>> call = APIService.getApiDatas(endpoint, auth, Constants.TOKEN_KEY, code);

interface APIService {
@GET
Call<List<ApiData>> getApiDatas(
@Url String url,
@Header("Authorization") String auth,
@Header("X-AUTH-TOKEN") String token,
@Query("barcode") String barcode
);
}


2.) předávání parametrů "barcode=B0002" už rovnou v názvu endpointu (string)
------------
String endpoint = Constants.URL+"endpoint/get?barcode="+code;
Call<List<ApiData>> call = APIService.getApiDatas(endpoint, auth, Constants.TOKEN_KEY);

interface APIService {
@GET
Call<List<ApiData>> getApiDatas(
@Url String url,
@Header("Authorization") String auth,
@Header("X-AUTH-TOKEN") String token
);
}

Přidat komentář