专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
开发者全社区  ·  你们的小姨,行长夫人火了 ·  13 小时前  
开发者全社区  ·  年会上被迫营业的小姐姐 ·  昨天  
开发者全社区  ·  陆家嘴某基金老登被曝光 ·  2 天前  
开发者全社区  ·  春节约炮被骗,聊天记录曝光 ·  2 天前  
开发者全社区  ·  辅导员投稿:和我的学生越界了 ·  3 天前  
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 < Response > getDataList ( @Query ( "page" ) int page );

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

Observable < Response > getDataList ( @Query ( "page" ) int page , @Query ( "user_id" ) int userId );


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


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


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


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

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


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


@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







请到「今天看啥」查看全文


推荐文章
开发者全社区  ·  你们的小姨,行长夫人火了
13 小时前
开发者全社区  ·  年会上被迫营业的小姐姐
昨天
开发者全社区  ·  陆家嘴某基金老登被曝光
2 天前
开发者全社区  ·  春节约炮被骗,聊天记录曝光
2 天前
开发者全社区  ·  辅导员投稿:和我的学生越界了
3 天前