将多个值传递给单个参数retrofit2

时间:2016-03-29 20:58:26

标签: android retrofit retrofit2 okhttp3 giphy-api

我正在尝试将多个值传递给SINGLE参数,例如:

http://api.giphy.com/v1/gifs?api_key=dc6zaTOxFJmzC&ids=feqkVgjJpYtjy,7rzbxdu0ZEXLy

我尝试了以下内容:

 @GET("gifs")
    Call<GIFModelMain> getGifsByID(@Field("ids")ArrayList<String> values, @Query("api_key") String API_KEY);

在我的活动中:

ArrayList<String> x = new ArrayList<>();
        x.add("feqkVgjJpYtjy");
        x.add("7rzbxdu0ZEXLy");
        gifCall = interf.getGifsByID(x, BuildConfig.GIPHY_API_TOKEN);

但构建的URL的格式为:

http://api.giphy.com/v1/gifsids=feqkVgjJpYtjy&ids=7rzbxdu0ZEXLy&api_key=API_KEY_BLANK

我查找了类似的问题,但没有找到正确的答案。

编辑:根据TooManyEduardos所说的我将界面更改为

@GET("gifs")
    Call<GIFModelMain> getGifsByID(@QueryMap Map<String, String> parameters,@Query("api_key") String API_KEY);

现在我的活动是:

Map<String,String> map = new HashMap<>();
        map.put("ids","feqkVgjJpYtjy");
        map.put("ids","7rzbxdu0ZEXLy");

        gifCall = interf.getGifsByID(map, BuildConfig.GIPHY_API_TOKEN);

但构建的URL仍然是: 03-30 02:46:23.922:E / FavActivity(21607):网址:api.giphy.com/v1/gifs?ids=7rzbxdu0ZEXLy&api_key=KEY_HERE

1 个答案:

答案 0 :(得分:0)

您正在寻找

Map<String,String>

在您的@Get界面中,您将收到以下内容:

(@QueryMap Map<String, String> parameters)

所以你的整个界面调用都是这样的:

@GET("gifs")
Call<GIFModelMain> getGifsByID(@QueryMap Map<String, String> parameters);

如果你想查看一下,我写了一篇关于如何使用Retrofit 2的完整教程:http://toomanytutorials.blogspot.com/2016/03/network-calls-using-retrofit-20.html

修改 如果您确实想要传递多个参数,无论其名称如何,您始终可以执行此操作:

Call<GIFModelMain> getGifsByID(@Query("api_key") String API_KEY, @Query("ids") String id1, @Query("ids") String id2, @Query("ids") String id3);

这里显而易见的问题是,您必须根据传递的ids数量来制作相同方法的多个版本