(点击上方公众号,可快速关注)
来源:伯乐在线专栏作者 - 一叶飘舟
链接:http://android.jobbole.com/84066/
关键词:Retrofit 动态参数、非固定参数、非必须参数
有如下场景:
请求数据时:
1. 用户未登录时,不带参数userId;
2. 登录时带上参数userId.
如下接口:
@GET("index.php?r=default/homepage")
ObservableResponse> getDataList(@Query("page") int page);
@GET("index.php?r=default/homepage")
ObservableResponse> getDataList(@Query("page") int page, @Query("user_id") int userId);
两个接口,区别就在于有没有『user_id』参数。
这样做,总感觉有点罗嗦,体现不出Retrofit的优越性。有没有更好的方法呢?当然有,那就是动态参数(其实很简单)。
上面的两个接口合并为一个:
@GET("index.php?r=default/homepage")
ObservableResponse> 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 MapString, String> param);
当然,还可以支持固定参数与动态参数的混用
@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(@Query("appid") String appid);
@Headers("Accept-Encoding: application/json")
@GET("applist/apps/detail?type=detail")
Call getDetail(@Header ("Accept-Encoding") String appid);
@Headers({
"X-Foo: Bar",
"X-Ping: Pong"
})
@GET("applist/apps/detail?type=detail")
Call getDetail(@Header ("Accept-Encoding") String appid);
@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