详解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);
使用
登录:
APIWrapper.getInstance().getDataList(mCurrentPage, 10);
未登录:
APIWrapper.getInstance().getDataList(mCurrentPage, null);
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
@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请求。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Android辅助功能AccessibilityService与抢红包辅助
抢红包的原理都差不多,一般是用Android的辅助功能(AccessibilityService类)先监听通知栏事件或窗口变化事件来查找红包关键字然后去模拟点击或打开红包2016-02-02Android开发中libs和jinLibs文件夹的作用详解
这篇文章主要给大家介绍了关于Android开发中libs和jinLibs文件夹的作用的相关资料,文中通过图文及示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。2017-09-09Android使用Jetpack Compose开发零基础起步教程
Jetpack Compose是用于构建原生Android UI的现代工具包。Jetpack Compose使用更少的代码,强大的工具和直观的Kotlin API,简化并加速了Android上的UI开发2023-04-04
最新评论