博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Retrofit使用教程
阅读量:4697 次
发布时间:2019-06-09

本文共 5253 字,大约阅读时间需要 17 分钟。

公司开源了许多优秀的库,Retrofit就是其中之一。

Retrofit是用来简化APP访问服务器API,如果你的服务器使用的使RESTAPI,那么赶紧使用Retrofit吧。

官方的文档是用GitHub的API说明使用过程的,有的童鞋可能从没用过GitHub的API(比如我),为了简单易懂,这里我使用一个查询手机归属地的API来说明Retrofit的使用过程。

集成

目前我使用的是AndroidStudio,那么在model的build.gradle文件中添加以下引用:

[代码]xml代码:

1
2
3
4
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.jakewharton:butterknife:7.0.1'

 

说明:

  • Retrofit依赖于okhttp,所以需要集成okhttp
  • API返回的数据为JSON格式,在此我使用的是Gson对返回数据解析.请使用最新版的Gson
  • butterknife是用来View绑定的,可以不用写那些烦人的findViewById

返回的数据格式

使用的是百度的API Store提供的API,地址在此:.

该接口的API主机地址为:http://apis.baidu.com,资源地址为:/apistore/mobilenumber/mobilenumber

需要一个key等于apikey的Header和一个key等于phone的查询关键字,而且该请求为GET请求.

所以我们需要构造一个GET请求,添加一个Header,添加一个Query关键字,访问该API返回的数据格式如下:

{    "errNum": 0,    "retMsg": "success",    "retData": {        "phone": "15210011578",        "prefix": "1521001",        "supplier": "移动",        "province": "北京",        "city": "北京",        "suit": "152卡"    }}

根据返回结果我们创建数据对象PhoneResult,如下:

[代码]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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
public
class
PhoneResult {
    
/**
     
* errNum : 0
     
* retMsg : success
     
* retData : {"phone":"15210011578","prefix":"1521001","supplier":"移动","province":"北京","city":"北京","suit":"152卡"}
     
*/
    
private
int
errNum;
    
private
String retMsg;
    
/**
     
* phone : 15210011578
     
* prefix : 1521001
     
* supplier : 移动
     
* province : 北京
     
* city : 北京
     
* suit : 152卡
     
*/
    
private
RetDataEntity retData;
  
    
public
void
setErrNum(
int
errNum) {
        
this
.errNum = errNum;
    
}
  
    
public
void
setRetMsg(String retMsg) {
        
this
.retMsg = retMsg;
    
}
  
    
public
void
setRetData(RetDataEntity retData) {
        
this
.retData = retData;
    
}
  
    
public
int
getErrNum() {
        
return
errNum;
    
}
  
    
public
String getRetMsg() {
        
return
retMsg;
    
}
  
    
public
RetDataEntity getRetData() {
        
return
retData;
    
}
  
    
public
static
class
RetDataEntity {
        
private
String phone;
        
private
String prefix;
        
private
String supplier;
        
private
String province;
        
private
String city;
        
private
String suit;
  
        
public
void
setPhone(String phone) {
            
this
.phone = phone;
        
}
  
        
public
void
setPrefix(String prefix) {
            
this
.prefix = prefix;
        
}
  
        
public
void
setSupplier(String supplier) {
            
this
.supplier = supplier;
        
}
  
        
public
void
setProvince(String province) {
            
this
.province = province;
        
}
  
        
public
void
setCity(String city) {
            
this
.city = city;
        
}
  
        
public
void
setSuit(String suit) {
            
this
.suit = suit;
        
}
  
        
public
String getPhone() {
            
return
phone;
        
}
  
        
public
String getPrefix() {
            
return
prefix;
        
}
  
        
public
String getSupplier() {
            
return
supplier;
        
}
  
        
public
String getProvince() {
            
return
province;
        
}
  
        
public
String getCity() {
            
return
city;
        
}
  
        
public
String getSuit() {
            
return
suit;
        
}
    
}
}

 

注:AndroidStudio有个插件可以很方便地将Json数据转为Java对象.

实现过程

构建

首先,按照官方的说明,我们需要创建一个接口,返回Call<PhoneResult>

官方范例:

[代码]java代码:

1
2
3
4
public
interface
GitHubService {
  
@GET
(
"users/{user}/repos"
)
  
Call<list<repo>> listRepos(
@Path
(
"user"
) String user);
}</list<repo>

 

这里我们创建一个名为PhoneService的接口,返回值为Call<PhoneResult>,如下:

[代码]java代码:

1
2
3
4
public
interface
PhoneService {
    
@GET
(
""
)
    
Call<phoneresult> getResult();
}</phoneresult>

 

首先我们需要填写API的相对地址:/apistore/mobilenumber/mobilenumber

[代码]java代码:

1
2
3
4
public
interface
PhoneService {
    
@GET
(
"/apistore/mobilenumber/mobilenumber"
)
    
Call<phoneresult> getResult(
@Header
(
"apikey"
) String apikey,
@Query
(
"phone"
) String phone);
}</phoneresult>

 

接着我们要添加一个Header和一个Query关键字,在这里我们需要使用Retrofit提供的注解:

  • @Header用来添加Header
  • @Query用来添加查询关键字

那么,我们的接口就如下了:

 

[代码]java代码:

1
2
3
4
public
interface
PhoneService {
    
@GET
(
"/apistore/mobilenumber/mobilenumber"
)
    
Call<phoneresult> getResult(
@Header
(
"apikey"
) String apikey,
@Query
(
"phone"
) String phone);
}</phoneresult>

 

使用

构建好接口以后,可以使用了!

使用分为四步:

  1. 创建Retrofit对象
  2. 创建访问API的请求
  3. 发送请求
  4. 处理结果

代码如下所示:

[代码]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
private
static
final
String BASE_URL =
"http://apis.baidu.com"
;
private
static
final
String API_KEY =
"8e13586b86e4b7f3758ba3bd6c9c9135"
;
  
private
void
query(){
    
//1.创建Retrofit对象
    
Retrofit retrofit =
new
Retrofit.Builder()
            
.addConverterFactory(GsonConverterFactory.create())
//解析方法
            
.baseUrl(BASE_URL)
//主机地址
            
.build();
  
    
//2.创建访问API的请求
    
PhoneService service = retrofit.create(PhoneService.
class
);
    
Call<phoneresult> call = service.getResult(API_KEY, phoneView.getText().toString());
  
    
//3.发送请求
    
call.enqueue(
new
Callback<phoneresult>() {
        
@Override
        
public
void
onResponse(Call<phoneresult> call, Response<phoneresult> response) {
            
//4.处理结果
            
if
(response.isSuccess()){
                
PhoneResult result = response.body();
                
if
(result !=
null
){
                    
PhoneResult.RetDataEntity entity = result.getRetData();
                
}
            
}
        
}
  
        
@Override
        
public
void
onFailure(Call<phoneresult> call, Throwable t) {
  
        
}
    
});
}</phoneresult></phoneresult></phoneresult></phoneresult></phoneresult>

 

可能会有疑问:第一步中的解析方法GsonConverterFactory.create()是个啥?

官方文档也说明了,这是用来转换服务器数据到对象使用的.该Demo中使用API返回的数据是JSON格式,故此使用Gson来转换,如果服务器返回的是其他类型的数据,则根据需要编写对应的解析方法.

验证

好了,现在可以验证一下了!

编译APP,安装到手机,界面如下:

APP界面

输入手机号码,然后点击查询按钮,结果如下:

结果界面

项目代码详见此处:

转载于:https://www.cnblogs.com/android-blogs/p/5752442.html

你可能感兴趣的文章
模板 - 数论函数
查看>>
windows Api AlphaBlend的使用方法
查看>>
mysql主从延迟高的原因
查看>>
Leetcode 47. Permutations II
查看>>
DLL入门浅析【转】
查看>>
sql server:取当前时间前10分钟之内的数据 dateadd()
查看>>
python安装MySQLdb:出错Microsoft Visual C++ 9.0 is required
查看>>
BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】
查看>>
【测绘图槽】03 测绘颂测绘人之歌(转载)
查看>>
LINUX下安装PHP(CGI模式)和NGINX[转]
查看>>
jQuery
查看>>
springboot定时器
查看>>
VS2017调试闪退之Chrome
查看>>
【Tip】如何让引用的dll随附的xml注释文档、pdb调试库等文件不出现在项目输出目录中...
查看>>
WPF中设置快捷键
查看>>
WebApi接口返回json,xml,text纯文本等
查看>>
C#/IOS/Android通用加密解密方法
查看>>
Web API 简单示例
查看>>
返璞归真 asp.net mvc (4) - View/ViewEngine
查看>>
ADO.Net对Oracle数据库的操作【转载】
查看>>