专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
鸿洋  ·  深入学习 Android ... ·  昨天  
鸿洋  ·  Google 为何设计了如此难用的 ... ·  4 天前  
鸿洋  ·  Android14 WMS/AMS ... ·  5 天前  
stormzhang  ·  真正该刺激的是收入 ·  6 天前  
鸿洋  ·  一款高效的HarmonyOS工具包 ·  6 天前  
51好读  ›  专栏  ›  安卓开发精选

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

安卓开发精选  · 公众号  · android  · 2017-03-15 22:13

正文

(点击上方公众号,可快速关注)


来源:伯乐在线专栏作者 - 一叶飘舟

http://android.jobbole.com/84066/

如有好文章投稿,请点击 → 这里了解详情


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


有如下场景:


请求数据时:

1. 用户未登录时,不带参数userId;

2. 登录时带上参数userId.


如下接口:


@GET("index.php?r=default/homepage")

Observable<ResponsegetDataList(@Query("page") int page);

 

@GET("index.php?r=default/homepage")

Observable<ResponsegetDataList(@Query("page") int page, @Query("user_id") int userId);


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


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


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


@GET("index.php?r=default/homepage")

Observable<ResponsegetDataList(@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 getDetail(@QueryMap Map<String, Stringparam);


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


@GET("applist/apps/detail?type=detail")

Call getDetail(@Query("appid") String appid);


修改Header


  • 固定添加Header


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

@GET("applist/apps/detail?type=detail")

Call getDetail(@Query("appid") String appid);


  • 动态添加Header


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

@GET("applist/apps/detail?type=detail")

Call getDetail(@Header ("Accept-Encoding") String appid);


  • 多个Header


@Headers({

    "X-Foo: Bar",

    "X-Ping: Pong"

  })

@GET("applist/apps/detail?type=detail")

Call getDetail(@Header ("Accept-Encoding") String appid);


  • 固定与动态的Header的混合


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

@GET("applist/apps/detail?type=detail")

Call getDetail(@Header ("Location") String appid);


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


That’s all.


或许你对这个也感兴趣:


Retrofit2.0 公共参数(固定参数)

http://blog.csdn.net/jdsjlzx/article/details/52063950


看完本文有收获?请分享给更多人

 关注「安卓开发精选」,提升安卓开发技术