专栏首页恩蓝脚本详解Retrofit 动态参数(非固定参数、非必须参数)(Get、Post请求)

详解Retrofit 动态参数(非固定参数、非必须参数)(Get、Post请求)

详解Retrofit 动态参数(非固定参数、非必须参数)(Get、Post请求)

关键词:Retrofit 动态参数、非固定参数、非必须参数

有如下场景:

请求数据时: 1. 用户未登录时,不带参数userId; 2. 登录时带上参数userId.

如下接口:

@GET("index.php?r=default/homepage")
Observable<Response<Exercise   getDataList(@Query("page") int page);

@GET("index.php?r=default/homepage")
Observable<Response<Exercise   getDataList(@Query("page") int page, @Query("user_id") int userId);

两个接口,区别就在于有没有『user_id』参数。

这样做,总感觉有点罗嗦,体现不出Retrofit的优越性。有没有更好的方法呢?当然有,那就是动态参数(其实很简单)。

上面的两个接口合并为一个:

@GET("index.php?r=default/homepage")
Observable<Response<Exercise   getDataList(@Query("page") int page,@Query("user_id") Integer userId);

使用

登录:

APIWrapper.getInstance().getDataList(mCurrentPage, 10);

未登录:

APIWrapper.getInstance().getDataList(mCurrentPage, null);

Retrofit运行null值参数,如果在实际调用的时候传一个null, 系统也不会出错,会把这个参数当作没有。

对于参数名称不固定的情况也可以使用Map

@GET("applist/apps/detail")
Call<ResponsePojo  getDetail(@QueryMap Map<String, String  param);

当然,还可以支持固定参数与动态参数的混用

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo  getDetail(@Query("appid") String appid);

修改Header

固定添加Header

@Headers("Accept-Encoding: application/json")

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo  getDetail(@Query("appid") String appid);

动态添加Header

@Headers("Accept-Encoding: application/json")

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo  getDetail(@Header ("Accept-Encoding") String appid);

多个Header

@Headers({
  "X-Foo: Bar",
  "X-Ping: Pong"
 })
@GET("applist/apps/detail?type=detail")
Call<ResponsePojo  getDetail(@Header ("Accept-Encoding") String appid);

固定与动态的Header的混合

@Headers("Accept-Encoding: application/json")

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo  getDetail(@Header ("Location") String appid);

以上用法同样适用于Post请求。

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android 多渠道(友盟)打包教程分享

    我们在 app 正式发布的时候一定会使用正式签名的方式来打包,这种方式只能生成唯一的一个包,但是如今的应用商店非常多,如:小米、OPPO、360、百度、豌豆荚、...

    砸漏
  • Android RecyclerView打造悬浮效果的实现代码

    本文介绍了Android RecyclerView悬浮效果,分享给大家,具体如下:

    砸漏
  • 解决Android Studio 格式化 Format代码快捷键问题

    之前使用Eclipse来做开发,现在换Android Studio的时候,原来常用的格式化代码快捷键就无法使用了。

    砸漏
  • 美团|深度学习在推荐中的实践

    石晓文
  • VBA判断工作表是否存在&不存在时创建(Excel)

    林万程
  • 编程小白 | 每日一练(159)

    这道理放在编程上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从编程小白进阶到高手,需要经历的是日积月累的学习,那么如何学习呢?当然是每天都...

    小林C语言
  • Android中一张图片占据的内存大小是如何计算提问正文推荐阅读

    最近封装了个高斯模糊组件,正好将图片相关的理论基础也梳理了下,所以,这次就来讲讲,在 Android 中,怎么计算一张图片在内存中占据的大小,如果要优化,可以从...

    请叫我大苏
  • 答读者们问题提问以及建议合集

    是的,他的昵称真的就叫图灵,一开始我以为是图灵出版社的人...他是《PHP网络编程》的阅读者,由于比较读的比较认真仔细,所以他问了一些问题,你们感受一下。

    老李秀
  • Nginx系列教程(6)Nginx location 匹配规则详细解说

    Nginx 的 location 实现了对请求的细分处理,有些 URI 返回静态内容,有些分发到后端服务器等,今天来彻底弄懂它的匹配规则

    haikangweishi
  • 深度 | 高频量化因子的批量生产与集中管理

    量化因子计算可以定义为一种基于初等计算函数与一阶谓词逻辑的递归过程。量 化因子的本质是股票的某种数量化特征,一般需要通过对股票某些数量信息进行 计算得到。与计算...

    量化投资与机器学习微信公众号

扫码关注云+社区

领取腾讯云代金券