详解Retrofit 动态参数(非固定参数、非必须参数)(Get、Post请求)
关键词:Retrofit 动态参数、非固定参数、非必须参数
有如下场景:
请求数据时:
1. 用户未登录时,不带参数userId;
2. 登录时带上参数userId.
如下接口:
@GET("index.php?r=default/homepage") Observable> getDataList(@Query("page") int page); @GET("index.php?r=default/homepage") Observable > getDataList(@Query("page") int page, @Query("user_id") int userId);
两个接口,区别就在于有没有『user_id』参数。
这样做,总感觉有点罗嗦,体现不出Retrofit的优越性。有没有更好的方法呢?当然有,那就是动态参数(其实很简单)。
上面的两个接口合并为一个:
@GET("index.php?r=default/homepage") Observable> 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") CallgetDetail(@QueryMap Map param);
当然,还可以支持固定参数与动态参数的混用
@GET("applist/apps/detail?type=detail") CallgetDetail(@Query("appid") String appid);
修改Header
固定添加Header
@Headers("Accept-Encoding: application/json") @GET("applist/apps/detail?type=detail") CallgetDetail(@Query("appid") String appid);
动态添加Header
@Headers("Accept-Encoding: application/json") @GET("applist/apps/detail?type=detail") CallgetDetail(@Header ("Accept-Encoding") String appid);
多个Header
@Headers({ "X-Foo: Bar", "X-Ping: Pong" }) @GET("applist/apps/detail?type=detail") CallgetDetail(@Header ("Accept-Encoding") String appid);
固定与动态的Header的混合
@Headers("Accept-Encoding: application/json") @GET("applist/apps/detail?type=detail") CallgetDetail(@Header ("Location") String appid);
热血大作战 安卓最新版v2.1.166
下载凡尔赛法环免广告版 最新版v1.69.1
下载天煞异种 安卓版v1.0.21
下载十三月 (Undecember)最新官方中文版v3.26.0200
下载星露谷物语sve 安卓版v1.5.6.52
星露谷物语sve手机版是游戏的超大拓展Mod内容,全称Sta
动物园大亨 手机版v2.0
动物园大亨是一款模拟动物园经营的休闲放置游戏,采用了卡通画风
蜜蜂园林钞票不减反增版 v0.1.68
蜜蜂园林无限道具版是游戏的破解版本,在该版本中为玩家提供了足
幻想熔炉失落帝国的世界 安卓版v2.16.2
幻想熔炉失落帝国的世界是一款魔法卡通风格的城市模拟经营类游戏
我的女友是声优免广告 安卓版v1
我的女友是声优免广告是一款非常好玩的模拟经营类手游,玩家在游