
正文
Android Retrofit使用教程(二)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
上一篇文章讲述了Retrofit的简单使用,这次我们学习一下Retrofit的各种HTTP请求.
Retrofit基础
在Retrofit中使用注解的方式来区分请求类型.比如
@GET("")
表示一个GET请求,括号中的内容为请求的地址.
| 格式 | 含义 |
|---|---|
@GET
|
表示这是一个GET请求 |
@POST
|
表示这个一个POST请求 |
@PUT
|
表示这是一个PUT请求 |
@DELETE
|
表示这是一个DELETE请求 |
@HEAD
|
表示这是一个HEAD请求 |
@OPTIONS
|
表示这是一个OPTION请求 |
@PATCH
|
表示这是一个PAT请求 |
基本的HTTP请求
Retrofit可实现基本HTTP请求,包括
GET
,
POST
,
PUT
,
DELETE
等.
1.
GET
请求
[代码]java代码:
?
|
1
2
|
@GET
(
"/record"
)
Call<phoneresult> getResult();</phoneresult>
|
2.
POST
请求
[代码]java代码:
?
|
1
2
|
@POST
(
"/record"
)
Call<phoneresult> getResult();</phoneresult>
|
3.
PUT
请求.
[代码]java代码:
?
|
1
2
|
@PUT
(
"/record"
)
Call<phoneresult> getResult();</phoneresult>
|
4.
DELETE
请求
[代码]java代码:
?
|
1
2
|
@DELETE
(
"/record"
)
Call<phoneresult> getResult();</phoneresult>
|
服务器接口类型
服务器接口有很多中,本人经验有限,目前接触较多为以下几种:
直接请求型
即直接对某一地址或组合某一地址发起请求
如:对
/result
和
/result/{id}
发起
GET
请求,其中
{id}
中的
id
在实际使用时填写实际值即可.
带参查询型
对某一地址进行带参查询请求
如:
https://www.baidu.com/s?wd=123
为对接口
https://www.baidu.com/s
进行参数为
wd=123
的
GET
查询请求.
带Header型
即请求时要求带上Header
Retrofit中如何写?
直接请求型
1.如果是直接请求某一地址,写法如下:
[代码]java代码:
?
|
1
2
|
@GET
(
"/record"
)
Call<phoneresult> getResult();</phoneresult>
|
2.如果是组合后直接请求,如
/result/{id}
写法如下:
[代码]java代码:
?
|
1
2
|
@GET
(
"/result/{id}"
)
Call<phoneresult> getResult(
@Path
(
"id"
) String id);</phoneresult>
|
带参查询型
如12306的查询接口
https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-03-18&from_station=BJP&to_station=CDW
,写法如下:
[代码]java代码:
?
|
1
2
3
|
@GET
(
"/otn/lcxxcx/query"
)
Call<result> query(
@Query
(
"purpose_codes"
) String codes,
@Query
(
"queryDate"
) String date,
@Query
(
"from_station"
) String from,
@Query
(
"to_station"
) String to)</result>
|
带Header型
比如要更新某个账户信息,其接口地址为
/info
,需要带的Header有设备信息
device
,系统版本
version
,还要带请求参数要更新账户的
id
,代码如下:
[代码]java代码:
?
|
1
2
3
|
@POST
(
"/info"
)
Call<object> updateInfo(
@Header
(
"device"
) String device,
@Header
(
"version"
)
int
version,
@Field
(
"id"
) String id); <br></object>
|
注:本想给每一种请求添加一个请求实例,但是确实不太好找.
实例
找了很久发现多说提供了一些POST请求接口,下面就以多说的接口为例,看一下如何使用
Retrofit
写请求.
基础URL
多说的接口基础地址为:
http://api.duoshuo.com
,则构建Retrofit实例代码如下:
[代码]java代码:
?
|
1
2
3
4
|
Retrofit retrofit =
new
Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(
"http://api.duoshuo.com"
)
.build();
|
获取文章评论、转发数
接口地址为:
/threads/counts
HTTP请求方式:
GET
请求示例为:
http://api.duoshuo.com/threads/counts.json?short_name=official&threads=4ff1cbc43ae636b72a00001d
后面的
.json
为返回数据的格式,此处我们使用
json
格式.
请求代码如下:
[代码]java代码:
?
|
1
2
3
|
@GET
(
"/threads/counts.json"
)
Call<object> getCommit(
@Query
(
"short_name"
) String shortName,
@Query
(
"threads"
) String threads); <br></object>
|
匿名发表新评论
接口地址为:
/posts/create
HTTP请求方式:
POST
请求示例为:
Request URL:
http://api.duoshuo.com/posts/create.json
Request Method:POST
Post Data:short_name=official&author_email=jp.chenyang%40gmail.com&author_name=Perchouli&thread_id=1152923703638301959&author_url=http%3A%2F%2Fduoshuo.com&message=匿名发表新评论
1.Field方式实现
[代码]java代码:
?
|
1
2
3
4
5
6
7
8
9
|
@FormUrlEncoded
@POST
(
"/posts/create.json"
)
Call<commitresult> createCommit(
@Field
(
"secret"
) String secret,
@Field
(
"short_name"
) String shortName,
@Field
(
"author_email"
) String authorEmail,
@Field
(
"author_name"
) String authorName,
@Field
(
"thread_key"
) String threadKey,
@Field
(
"author_url"
) String author_url,
@Field
(
"message"
) String message);</commitresult>
|
2.Field Map实现方式
[代码]java代码:
?
|
1
2
3
|
@FormUrlEncoded
@POST
(
"/posts/create.json"
)
Call<commitresult> createCommit(
@FieldMap
Map<string, string=
""
> map);</string,></commitresult>
|
获取Map方式如下:
[代码]java代码:
?
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
public
class
CommitParam {
private
String short_name;
private
String author_email;
private
String author_name;
private
String thread_id;
private
String author_url;
private
String message;
public
String getShort_name() {
return
short_name;
}
public
void
setShort_name(String short_name) {
this
.short_name = short_name;
}
public
String getAuthor_email() {
return
author_email;
}
public
void
setAuthor_email(String author_email) {
this
.author_email = author_email;
}
public
String getAuthor_name() {
return
author_name;
}
public
void
setAuthor_name(String author_name) {
this
.author_name = author_name;
}
public
String getThread_id() {
return
thread_id;
}
public
void
setThread_id(String thread_id) {
this
.thread_id = thread_id;
}
public
String getAuthor_url() {
return
author_url;
}
public
void
setAuthor_url(String author_url) {
this
.author_url = author_url;
}
public
String getMessage() {
return
message;
}
public
void
setMessage(String message) {
this
.message = message;
}
public
Map<string, string=
""
> createCommitParams(){
Map<string, string=
""
> params =
new
HashMap<>();
params.put(
"short_name"
, short_name);
params.put(
"author_email"
, author_email);
params.put(
"author_name"
, author_name);
params.put(
"thread_id"
, thread_id);
params.put(
"author_url"
, author_url);
params.put(
"message"
, message);
return
params;
}
}</string,></string,>
|
项目地址在此:Dev-Wiki/RetrofitDemo







