专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
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 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


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

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







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