Android Retrofit 2 - GET - error: element value must be a constant expression
Ahoj,
mám ve své android aplikaci nastaven GET pro Retrofit2 takto:
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)
Použiji nestatickou proměnnou zde přes class Variables:
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
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!
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!
Show english version
@GET
Call> getApiDatas(@Header("X-AUTH-TOKEN") String token, @Url String url);
.......
Call> call = APIService.getApiDatas(Constants.TOKEN_KEY, Constants.TYPE + Variables.getType());
.......
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
);
}