【问题标题】:Attribute Value must be a Constant in Retrofit Api InterfaceRetrofit Api 接口中的属性值必须是常量
【发布时间】:2018-11-20 03:31:12
【问题描述】:

我正在尝试隐藏我的 API 密钥,因此我正在设置我的 Retrofit Api 接口:

public interface ApiInterface {
    @GET("?api_key=" + popularmovies.name.com.popularmovies.BuildConfig.TMD_API_KEY + "&language=en-US")
    Call<Movies> getImages();
}

但是,我收到一条错误消息“属性值必须是常量。”有没有办法解析和访问这个字符串?


更新:这是第二次尝试:

private static final String API_KEY = popularmovies.troychuinard.com.popularmovies.BuildConfig.TMD_API_KEY;


public interface ApiInterface {
    @GET("?language=en-US")
    Call<Movies> getImages(@Query("api_key") API_KEY);
}

更新:这是第三次尝试:

下面是我看到的作为发出请求的 URL 的日志记录,可以看出 API 密钥现在位于 URL 的末尾,这是不正确的语法:

06-10 18:41:33.212 4969-4993/? D/OkHttp: http://api.themoviedb.org/3/movie/popular?language=en-US&api_key=?api_key%3D09b0a9a9d5d9ddee2b3bc69e78b02457 (592ms) 访问控制允许来源:*

【问题讨论】:

  • 有人回答了你的问题后,不要替换问题的全部内容。这使得答案毫无用处。相反,编辑问题并向其添加更多材料,例如显示代码的第二次尝试。

标签: java android gradle retrofit


【解决方案1】:

用途:

@GET("/rest/of/your/path/here?language=en-US")
Call<Movies> getImages(@Query("api_key") apiKey);

您在popularmovies.name.com.popularmovies.BuildConfig.TMD_API_KEYgetImages() 传递的位置:

Call<Movies> call=yourRetrofitInterface.getImages(BuildConfig.TMD_API_KEY);

此外,您的 @GET 注释似乎缺少 REST 端点的路径(在我的示例中显示为 /rest/of/your/path/here)。

【讨论】:

  • 端点可以根据用户可以切换的设置进行更改。我唯一的问题是,当 api_key 位于我的注释中的其他 2 个字符串之间时,这是如何可能的,在您的回复中,您摆脱了这个“?api_key =”,端点的其余部分是我在另一个中设置的 baseURL我的代码部分
  • @tccpg288:“我唯一的问题是,当 api_key 位于我的注释中的其他 2 个字符串之间时,这怎么可能”——您的 API 密钥不能在注释中。这就是错误告诉您的内容:注释中的值必须是常量。你的不是。 “在你的回复中,你去掉了这个“?api_key =”——我把它移到了@Query注释中。
  • 我无法将创建的字符串传递给查询参数
  • @tccpg288:这不是有效的 Java 语法。我已经更新了我的答案,以阐明您如何传递 API 密钥。
  • 我已经更新了我的代码,API 密钥现在出现在我的请求 URL 的末尾,我认为这是导致问题的原因
猜你喜欢
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
相关资源
最近更新 更多