上一篇文章讲述了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