如何在Retrofit中使用@Query?AndroidKotlin

wfauudbj  于 2023-04-28  发布在  Android
关注(0)|答案(2)|浏览(185)

我目前正在尝试做一个ApiInterface。我正在尝试通过使用查询来操作API URL。到目前为止我使用的URL是
https://api.themoviedb.org/3/search/movie?api_key={apiKey}&language=en-US&query={query}
上面的网址我试图改变“查询”所以我创建了这个接口:

@GET("3/search/movie?api_key=${BuildConfig.MOVIE_TOKEN}&language=en-US&")
fun getMovies(
        @Query("query") query: String
): Call<SearchMovieResponse>

它工作得很好,但是如果URL的情况是这样的:
https://api.themoviedb.org/3/movie/{id}?api_key=7fad718afb38c7fe3fbe9da94e0d54e6
我试图操作{id}的地方。接口是这样的吗?

@GET("3/movie/{id}?api_key=${BuildConfig.MOVIE_TOKEN}")
fun getMovieById(
    @Query("id") id: String
):Call<SearchDetailMovieResponse>

请帮助我了解如何利用注解来修改API URL

ogsagwnx

ogsagwnx1#

在以下URL的情况下正确使用@Query
https://api.themoviedb.org/3/movie/{id}?api_key=7fad718afb38c7fe3fbe9da94e0d54e6
您需要编写这样的接口

@GET("3/movie/{id}")
fun getMovieById(
    @Path("id") id: String,
    @Query("api_key") apiKey: String = BuildConfig.MOVIE_TOKEN
):Call<SearchDetailMovieResponse>

有关详细信息,请参阅documentation

eimct9ow

eimct9ow2#

您可以使用@Path注解来实现这一点。

@GET("3/movie/{id}?api_key=${BuildConfig.MOVIE_TOKEN}")
fun getMovieById(
    @Path("id") id: String
):Call<SearchDetailMovieResponse>

附加信息:

如果你在url的中间有参数,并且想要给予动态值,那么使用@Path注解,因为你在url的中间有id。
e-g https://test-api/3/profile. 3是url中间的参数,在这种情况下我们使用@Path
如果你在url的中间没有参数,而想在url的末尾传递参数,最好使用@Query
例如https://test-api/profile?user_id = 3 user_id是key value参数,在这种情况下我们使用@Query。
答:我是按照我的理解来分享的。

相关问题