【问题标题】:Pass multiple values to single parameter retrofit2将多个值传递给单个参数改造2
【发布时间】:2016-03-30 05:28:16
【问题描述】:

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

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

【问题讨论】:

    标签: android retrofit retrofit2 okhttp3 giphy-api


    【解决方案1】:

    你正在寻找一个

    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 数量来制作同一方法的多个版本

    【讨论】:

    • 按照我的建议,你会得到这个: Call getGifsByID(@QueryMap Map parameters,@Field("ids")ArrayList values, @Query( "api_key") 字符串 API_KEY);
    • 改成这样:Call getGifsByID(@QueryMap Map parameters);
    • 所以现在您忘记了数组列表,并且您还将 API_KEY 作为 Map 参数的另一个键值对传递
    • 我将“ids”参数放在地图的第一个字符串中。我还需要@Field("ids")ArrayList 值吗?
    • 不。只需将 Map 与所有参数一起传递,因为它们都是 GET 调用的参数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多