(点击
上方公众号
,可快速关注)
来源:
伯乐在线专栏作者 - 一叶飘舟
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
@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