详解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);
使⽤
登录:
未登录:
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
android retrofit
@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请求。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。