上一篇文章讲述了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,>
|
原文链接:http://www.apkbus.com/blog-705730-61355.html