对于详解Retrofit动态参数感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解非固定参数、非必须参数,并且为您提供关于7python函数参数(必须参数、可变参数、关键字参数)、Ajax关键
对于详解Retrofit 动态参数感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解非固定参数、非必须参数,并且为您提供关于7 python函数参数(必须参数、可变参数、关键字参数)、Ajax 关键点(get请求---post请求)、ajax数据交互的方式(get/post请求、 url)(原生自带的fetch请求)、angular4 get,post请求(带参数,与不带参数)的宝贵知识。
本文目录一览:- 详解Retrofit 动态参数(非固定参数、非必须参数)(Get、Post请求)
- 7 python函数参数(必须参数、可变参数、关键字参数)
- Ajax 关键点(get请求---post请求)
- ajax数据交互的方式(get/post请求、 url)(原生自带的fetch请求)
- angular4 get,post请求(带参数,与不带参数)
详解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请求。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
您可能感兴趣的文章:
- 为Retrofit统一添加post请求的默认参数的方法
- Retrofit2.0 实现图文(参数+图片)上传方法总结
- Retrofit2.0 公共参数(固定参数)
7 python函数参数(必须参数、可变参数、关键字参数)
1 #python中的函数定义,使用和传参
2
3 ###------------------- 必要参数 -------------------------------------
4
5 必要参数,即函数调用时必须要传的参数,
6
7
8 #下面进行举例说明
9
10 def helloWorld(a):
11 print(''输出:hello'')
12
13 if __name__ == ''__main__'':
14 helloWorld("aaa") ## 必须要有参数
15
16 ##------------ 默认参数 -----------------------------------------------------------
17 说明:
18 1.必选参数在前,
19 2,有多个默认参数时,调用的时候,既可以按顺序提供默认参数
20 3,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上
21
22 例如:
23 def enroll(name, gender, age=6, city=''Beijing''):
24 print(''name:'', name)
25 print(''gender:'', gender)
26 print(''age:'', age)
27 print(''city:'', city)
28
29
30 enroll(''Bob'', ''M'', 7)
31 enroll(''Adam'', ''M'', city=''Tianjin'')
32
33
34 特别重要:
35 ### 定义默认参数要牢记一点:默认参数必须指向不变对象!
36
37 例如:
38 def add_end(L=[]):
39 L.append(''END'')
40 return L
41
42 print (add_end())
43 print (add_end())
44
45 结果:
46 [''END'']
47 [''END'',''END'']
48
49 原因说明:
50 Python函数在定义的时候,默认参数L的值就被计算出来了,在每次调用时,L参数已经变前一次调用所更改了,
51
52 所以:
53 避免在函数里面去修改函数的默认参数值。
54
55
56 ##--------------------- 关键字参数 --------------------------------------------
57
58
59 def about(name,course,site):
60 print (name,course,site)
61
62 about(''jim'',''100'',''www.baidu.com'') ## 必须按顺序传参
63 about(site=''www.baidu.com'',name=''green'',course=100) ##以关健字方式传入参数(可以不按顺序)
64
65
66
67
68 ##-------------- 不定长参数(可变参数) (这些可变参数在函数调用时自动组装为一个tuple)-----------------------------------------------------------
69
70 顾名思义:
71 可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
72
73 ###重要说明:
74 (可变参数的好处是,不用事先准备好LIST或者元组)
75 这些可变参数在函数调用时自动组装为一个tuple
76
77 定义:
78 def loop(*args):
79 for x in args:
80 print x
81
82 loop(1,2,3)
83
84 结果是:
85 1
86 2
87 3
88
89 ###说明2:
90 如果已经有了一个列表或者元组,怎么传递可变参数呢??? 如下:
91
92 def loop(*args):
93 for x in args:
94 print x
95
96 loop(1,2,3)
97 a=[4,5,6]
98 loop(*a) ## 这里要在列表 或元组 前面加* 连传递参数进来。
99
100
101
102
103 ###------------------- 这也是不定长参数 ----------------------------------------------------------------
104
105 说明:
106 这些关键字参数在函数内部自动组装为一个dict
107
108 函数定义:
109 def person(name, age, **kw):
110 print(''name:'', name, ''age:'', age, ''other:'', kw)
111
112 调用1:
113 >>> person(''Michael'', 30)
114 name: Michael age: 30 other: {}
115
116 调用2:
117 >>> person(''Adam'', 45, gender=''M'', job=''Engineer'')
118 name: Adam age: 45 other: {''gender'': ''M'', ''job'': ''Engineer''}
119
120 调用3:
121 >>> extra = {''city'': ''Beijing'', ''job'': ''Engineer''} ---事先已经有了一个字典
122 >>> person(''Jack'', 24, **extra) ---- **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数
123 name: Jack age: 24 other: {''city'': ''Beijing'', ''job'': ''Engineer''}
124
125 ###调用说明:
126 **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,
127 注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
128
129
130 ##--------------------------------------------
Ajax 关键点(get请求---post请求)
总结
以上是小编为你收集整理的Ajax 关键点(get请求---post请求)全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
ajax数据交互的方式(get/post请求、 url)(原生自带的fetch请求)
传统的交互方式:
1 <form action="/get">
2 用户名:<input type="text" use=""/>
3 密码:<input type="password"/>
4 <input type="submit" value="提交"/>
5 <form>
<form action="/post" method="POST" enctype="application/x-www-form-urlencoded" >
用户名:<input type="text" name="user"/>
密 码:<input type="password" name="password" />
<input type="submit" value="提交">
</form>
jq 的 ajax 的方式:
首先要引入 jQuery 文件
/*
url:请求地址 (后台童鞋一定会你的)
data:数据的拼接
dataType --(等同于)-> JSON.parse() (把json转成对象)
success:function(data){
data ->为object,直接使用的数据
}
*/
$.ajax({
url:必须传,(向后台要)
data:{
人:刘德华
狼:
神:
key(为前后端一起定义的字段):val(前端传的数据)
},
success:function(json/data){
let data = JSON.parse(json);//如果拿到的数据是json就转成对象,如果是data(对象)就直接使用
//dataType:"json"
if(data.code === 0){
$("#txt").removeClass("ok");
$("#txt").addClass("error");
}
if(data.code === 1){
$("#txt").removeClass("error");
$("#txt").addClass("ok");
}
}
})
$(''#txt'').blur(function(){
// $.ajax({
// url:''/getget'',
// dataType:''json'',
// data:{
// ren:$(this).val()
// },
// success:function(data){
// if(data.code){
// $(''#txt'')[0].className = ''ok'';
// }else{
// $(''#txt'')[0].className = ''error'';
// }
// }
// })
//下面这种方式,也可以。
fetch(''/getget?ren=''+$(this).val())
.then(e=>e.json())
.then(data=>{
console.log(data);
});
});
原生的 ajax 交互模型
<body>
用户名:<input type="text" id="txt"/>
<input type="button" value="提交" id="btn">
<script>
//xxx.com?a=5#id=0
//?a=5 问号到井号之间的信息叫查询信息 window.location.search
//key=val&key=val
btn.onclick = function(){
/*
在IE下,有ActiveXObject插件,
new ActiveXObject("Mscrosoft.XMLHttp");
*/
let xhr = new XMLHttpRequest;
/*
请求方式有:
GET、POST、DELETE、PUT
GET通过URL的方式去请求的服务器
*/
xhr.open(''get'',''/get?ren=''+txt.value,true);
xhr.send();
xhr.onload = function(){
console.log(xhr.responseText);
}
//未来会用下面这个 (原生自带的请求方式)
// fetch(''/get?ren=''+txt.value)
// .then((e)=>e.json())
// .then(data=>{
// console.log(data);
// });
}
</script>
</body>
/*
ajax 的模型叫 电话模式
1.先有一个电话 创建ajax对象
2.输入号码(拨号) 填写请求地址 xhr.open("请求的方式","url地址"+具体字段,请求异步默认为true)
3.发送 send()
4.等待 xhr.onload
5.成功接收 在xhr.onload中接收到数据 xhr.responseText
*/
btn.onclick = function(){
let xhr = new XMLHttpRequest;//1.创建ajax对象
xhr.open("get","/get?user="+txt.value,true)//第三个参数:是否异步(true:要异步); 2.填写请求地址
xhr.send(); //3.发送
xhr.onload = function(){ //4.等待服务器响应
//console.log(xhr.responseText) //5.接收的信息
let data = JSON.parse(xhr.responseText);
if(data.code == 0){
txt.className = "error"
}else if(data.code == 1){
txt.className = "ok"
}
}
}
用 get 对于请求的 数据 和 静态资源(html的页面。图片),在低 IE 下都会缓存
angular4 get,post请求(带参数,与不带参数)
##一:在app.module.ts引入HttpMoudle
import { BrowserModule } from ''@angular/platform-browser'';
import { HttpModule } from ''@angular/http'';
imports: [
BrowserModule,
HttpModule
],
##二:在对应使用请求的组件的ts中引入
import { Http , ResponseOptions , Headers , URLSearchParams } from ''@angular/http'';
##三:在构造函数中注入
constructor( private http: Http ) { }
##四:使用get和post请求 ①:带参数的post(一定要使用URLSearchParams进行封装)
getData() {
const d = new URLSearchParams();
d.append(''para'', ''value'' );
d.append(''para1'', ''value'' );
this.http.post( ''地址'' , d)
.map(res => res.json()) // (5)
.subscribe(data => {
alert(JSON.stringify(data));
}, err => {
console.error(''ERROR'', err);
});
②:带参数的get请求
getData() {
const dates = {
''str'': 123
};
this.http.get(''地址'' , {params: dates})
.map(res => res.json())
.subscribe(data => {
alert(JSON.stringify(data));
}, err => {
console.error(''ERROR'', err);
});
③:不带参数的get请求
getData() {
this.http.get(''/hello'')
.map(res => res.json())
.subscribe(data => {
alert(JSON.stringify(data));
}, err => {
console.error(''ERROR'', err);
});
##五:后台接收
@RequestMapping("/hello")
@ResponseBody
public String hello(HttpServletRequest req) {
System.out.print(req.getParameter("str"));
Gson gson = new Gson();
String s1= gson.toJson(1);
return s1;
}
我们今天的关于详解Retrofit 动态参数和非固定参数、非必须参数的分享已经告一段落,感谢您的关注,如果您想了解更多关于7 python函数参数(必须参数、可变参数、关键字参数)、Ajax 关键点(get请求---post请求)、ajax数据交互的方式(get/post请求、 url)(原生自带的fetch请求)、angular4 get,post请求(带参数,与不带参数)的相关信息,请在本站查询。
本文标签: