为什么我得到属性值必须是常量错误?

时间:2017-01-18 13:10:05

标签: java android retrofit2

我正在尝试将当前日期添加到HTTP @GET中的url String,但我收到Attribute value must be constant错误。我无法理解为什么?我正在使用改造2。

public interface API {

  final Date c = new Date();
  final String date=new SimpleDateFormat("yyyy-MM-dd").format(c);

  static final String url = ("/modules/json/json/Index?costNumber=0417&firstDay="+date+"&language=fi");


  @GET(url)
  Call<Menu> getMenuName();

2 个答案:

答案 0 :(得分:2)

弗雷德的答案是您案件的正确解决方案。但是,为了获得完整的信息,Retrofit 2确实支持动态URL。您可以将其作为@Url参数传递给接口方法,例如:

@GET
Call<ResponseBody> getMenuName(@Url String url);

您无需在@GET注释中指定网址。 Retrofit将从传递的url中获取值。这使您可以选择从动态URL请求数据,这在某些情况下很有用。

您可以在此处找到更多信息:https://futurestud.io/tutorials/retrofit-2-how-to-use-dynamic-urls-for-requests

答案 1 :(得分:1)

@Selvin已在评论中指出,因为date不是常数。

使用改造通常会将其设为查询参数,因此您可以将getMenuName更改为:

@GET("/modules/json/json/Index")
Call<Menu> getMenuName(
       @Query("costNumber") String costNumber,
       @Query("firstDay") String firstDay,
       @Query("language") String language);

然后,您可以使用适当的参数调用该方法:

getMenuName("0417", date, "fi");

Retrofit将知道如何为您构建网址。请注意,与使用硬编码的网址相比,使用不同的costNumberfirstDay进行相同的调用也更容易。