将多个值传递给单个参数 retrofit2
Pass multiple values to single parameter retrofit2
我正在尝试将多个值传递给单个参数,例如:
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);
在我的 activity 中:
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);
我的 activity 现在是:
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): Url : api.giphy.com/v1/gifs?ids=7rzbxdu0ZEXLy&api_key=KEY_HERE
您正在寻找
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
数量
制作同一方法的多个版本
我正在尝试将多个值传递给单个参数,例如:
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);
在我的 activity 中:
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);
我的 activity 现在是:
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): Url : api.giphy.com/v1/gifs?ids=7rzbxdu0ZEXLy&api_key=KEY_HERE
您正在寻找
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
数量