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);
  • 1
  • 2
  • 3
  • 4
  • 5

两个接口,区别就在于有没有『user_id』参数。

这样做,总感觉有点罗嗦,体现不出Retrofit的优越性。有没有更好的方法呢?当然有,那就是动态参数(其实很简单)。

上面的两个接口合并为一个:

@GET("index.php?r=default/homepage")
Observable<Response<Exercise>> getDataList(@Query("page") int page,@Query("user_id") Integer userId);
  • 1
  • 2

使用

登录:

APIWrapper.getInstance().getDataList(mCurrentPage, 10);
  • 1

未登录:

APIWrapper.getInstance().getDataList(mCurrentPage, null);
  • 1

Retrofit运行null值参数,如果在实际调用的时候传一个null, 系统也不会出错,会把这个参数当作没有。

对于参数名称不固定的情况也可以使用Map

@GET("applist/apps/detail")
Call<ResponsePojo> getDetail(@QueryMap Map<String, String> param);
  • 1
  • 2
  • 3

当然,还可以支持固定参数与动态参数的混用

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Query("appid") String appid);
  • 1
  • 2

修改Header

固定添加Header

@Headers("Accept-Encoding: application/json")?
@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Query("appid") String appid);
  • 1
  • 2
  • 3

动态添加Header

@Headers("Accept-Encoding: application/json")?
@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Header ("Accept-Encoding") String appid);
  • 1
  • 2
  • 3

多个Header

@Headers({
    "X-Foo: Bar",
    "X-Ping: Pong"
  })
@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Header ("Accept-Encoding") String appid);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

固定与动态的Header的混合

@Headers("Accept-Encoding: application/json")?
@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Header ("Location") String appid);
  • 1
  • 2
  • 3

以上用法同样适用于Post请求。

That’s all.

或许你对这个也感兴趣:

Retrofit2.0 公共参数(固定参数)

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

原文地址:https://www.cnblogs.com/skiwnchhw/p/10349636.html

时间: 2024-08-01 22:27:48

Retrofit 动态参数(非固定参数 非必须参数)(Get Post请求)的相关文章

python-函数-非固定参数

非固定参数: 非固定参数的作用:可以传不固定个数的参数进去,为以后的扩展准备. 在函数中,加了名字的非固定函数输出是会显示为字典形式,没有加名字的非固定函数输出时会显示为元组形式. def sud(name,age,*args,**kwargs):#*args 会把多传入的参数变成一个元组形式显示:**kwargs 会把多传入的参数变成一个字典的形式显示 print(name,age,args,kwargs) returnsud("zhangsan",20,"beijing&

函数的非固定参数,默认参数,参数组

默认参数: 也可以给默认参数赋值,这个时候就取代了默认的值了: 默认参数的特点:调用函数的时候,默认参数非必须传递: 作用:1.自定义安装软件,默认安装值: 2.连接数据库的参数:比如默认端口号3306 参数组: *args,这个就是参数组,前面有一个星号*,后面可以跟任意字母,定义一个参数组. 接受多个实参,然后把实参放到一个元祖里去.下面的列表作为实参,也是可以的.不过都是转换为元祖. 也可以这么应用,如下图: 如果传输字典实参到函数,可以如下:**kwargs,两个*.把N个关键字参数,转

Retrofit2.0 公共参数(固定参数)

请先阅读: Retrofit 动态参数(非固定参数.非必须参数)(Get.Post请求) 在实际项目中,对于有需要统一进行公共参数添加的网络请求,可以使用下面的代码来实现: RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(ctx).setRequestInterceptor(new RequestInterceptor() { @Override public void intercept(RequestFacad

动态游标(例如表名作为参数)以及动态SQL分析

表名作为参数的动态游标 DECLARE v_table_name VARCHAR2(30) := 'CUX_MES_WIP_BARCODE_MAP'; --l_rec SYS_REFCURSOR; TYPE t_data IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER; TYPE t_cur IS REF CURSOR; l_data t_data; l_rec t_cur; l_cur VARCHAR2(4000); v_fm_barcode

(转) Android 全屏控制:动态切换全屏和非全屏

转自:http://blog.csdn.net/michaelpp/article/details/7302308 动态切换全屏和非全屏: package com.screen;   import android.app.Activity;  import android.os.Bundle;  import android.view.View;  import android.view.WindowManager;  import android.view.View.OnClickListen

函数参数不固定的时候如何求返回值?arguments

arguments实质为个数组,里面存的是传给函数的参数,因为是数组,所以有length属性,通过length属性可以知道里面有几个变量.对于参数不固定的函数,求所有参数的和,思路如下: (1)定义一个函数,给函数命名. (2)将所有参数放到要用的函数. (3)根据要求,要求所有 参数的和的结果,把开始的结果存在一个定义的变量里,初始值为0. (4)对每次函数的结果依次求和,用循环,并把每次求和的结果赋给存结果参数的变量求和放在那个变量里 (5)输出返回值. <!doctype html> &

python函数参数类型:位置参数、默认参数、动态参数

1.位置参数:调用函数的时候传的参数,参数默认按顺序赋值,如果是指定那个参数赋值,不关注顺序.指定参数a=1,b=2 就在函数体内a=1,b=2 2.默认参数:在定义函数的时候,给某个参数设置默认值 3.动态参数:*args 调用函数是可以传入任意个参数或者不传,传递到函数内部会把这些函数存入到一个元组 4.一个函数有位置参数,默认参数时位置参数必须在默认参数前面 原文地址:https://www.cnblogs.com/mo-nian/p/11841066.html

Spring JDBC 框架中, 绑定 SQL 参数的另一种选择:具名参数(named parameter)

使用spring的jdbcTemplate-----使用具名参数 在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限制,定位参数的问题在于,一旦参数的位置发生变化,必须改变参数的绑定,在Spring JDBC中,绑定SQL参数的另一种选择是使用具名参数,SQL具名参数是按照名称绑定,而不是位置绑定. 什么是具名参数? 具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代 具名参数只在 NamedP

将参数字典排序,并转为 GET 参数形式.

1.创建 NSString 分类 @interface NSString (WBRequest) - (NSString *)URLEncodedString; - (NSString *)URLEncodedStringWithCFStringEncoding:(CFStringEncoding)encoding; @end @implementation NSString (WBRequest) - (NSString *)URLEncodedString { return [self UR