本文由 伯乐在线 - imesong 翻译自 meetme。欢迎加入Android小组。转载请参见文章末尾处的要求。
android
如今,Android应用程序中集成第三方API已十分流行。应用程序都有本身的网络操做和缓存处理机制,可是大部分比较脆弱,没有针对网络糟糕状况进行优化。感谢Square lnc 这家有创新精神的公司,将信用卡商业交易带到手机上。如今有了一系列高质量开源库,支持在Android应用程序中集成。git
如今,咱们要依次学习使用Retrofit、OKHttp和GSON,简单快速的集成REST API。使用这个组合,咱们须要从Twitch.tv下载并解析一些数据。跟着下面的步骤能够在几分钟内,不用写繁琐的模板代码,完成大部分的REST API集成。github
Retrofitweb
Retrofit简化了从Web API下载数据,解析成普通的Java对象(POJO)。例如,要从Github 上下载用户仓库的信息,你只须要编写下面的几行:json
1
2
|
另外,你须要建立仓库信息类和数据类型。这些代码也能够自动生成,下面会介绍如何自动生成。api
整个过程很简单,相似发送一次有参数的请求或发送POST或HEAD。如何链接不一样类型的API,请查看说明文当。数组
Retrofit的特性之一能够将处理逻辑添加到请求和响应中。你能够添加数据到http请求头部,也能够拦截验证失败的响应重定向到登陆界面。浏览器
OKHttp缓存
OKHttp是Android版Http客户端。很是高效,支持SPDY、链接池、GZIP和 HTTP 缓存。默认状况下,OKHttp会自动处理常见的网络问题,像二次链接、SSL的握手问题。若是你的应用程序中集成了OKHttp,Retrofit默认会使用OKHttp处理其余网络层请求。网络
GSON
GSON是将JSON解析成POJO的Java库。GSON也能够将POJO解析成JSON。在Android中,数据对象存储在SharePreference更加方便。
要使用GSON,首先须要建立相应的POJO数据,再用GSON解析为POJO对象。解析过程简单且很是高效。须要了解如何建立能够被GSON解析的POJO对象,请查看说明文档。Retrofit使用GSON解析JSON数据。
添加库文件到工程
查找或者编写API
你可能已有一份API,若是你还在寻找API目录,我推荐ProgrammableWeb。在这个教程中,咱们会解析Twitch.Tv的数据流。请求格式请参考说明手册。Twicht.tv请求数据流的JSON格式:
http://api.justin.tv/api/stream/list.json
展现输出
展现一些API返回的数据,下面的示例是因为是一个GET请求,只能在浏览器中运行,返回数据以下:
1
|
[{
"broadcast_part"
: 4,
"featured"
:
true
,
"channel_subscription"
:
true
,
"audio_codec"
:
"uncompressed"
,
"id"
:
"6640712464"
,
"category"
:
"gaming"
,
"title"
:
"Fnatic xPeke, Normals(ranked down) on smurf"
,
"geo"
:
"DE"
,
"video_height"
: 1080,
"site_count"
: 8014,
"embed_enabled"
:
true
,
"channel"
: {
"subcategory"
:
null
,
"producer"
:
true
,
"image_url_huge"
:
"http://static-cdn.jtvnw.net/jtv_user_pictures/xpeke-profile_image-a182a5fe5a8f239b-600x600.jpeg"
,
"timezone"
:
"Europe/Madrid"
,
"screen_cap_url_huge"
: “http://static
|
建立POJO
这部分颇有趣,用咱们获取到的数据自动建立对应的POJO。使用jsonschema2pojo,导入包名、类名和JSON数据,保存为私有类型。示例中展现的构造器没法使用,由于JSON数据的根元素是个数组,不是对象。因此我只贴出了数组的第一个元素。展现相关的图片示例。
集成POJOs
将自动产生的POJOs粘贴到工程中就能够了。在个人示例工程中,他们在models包中。
使用Retrofit下载(解析)API
建立REST Adapter
建立Adapter,相似设置endPoint。
1
2
3
|
RestAdapter restAdapter =
new
RestAdapter.Builder()
.setEndpoint(
"http://api.justin.tv/api"
)
.build();
|
定义API接口
为须要链接的endPoint定义接口。下面示例中,使用limit和offset,这两个参数用来控制请求数据位置和大小。详细说明请参考API文档。
1
2
3
|
public
interface
TwitchTvApiInterface {
|
你可能会注意到,咱们指望返回的是一组JustinTvStreamData对象,也就是咱们刚才自动产生的POJO。关于如何定义这个接口的更多信息,请参考Retrofit说明文档。
建立Twitch.tv 服务
如今咱们已经创建了endPoint,定义了须要的接口。下面须要建立Twitch.TV服务,发送请求。
1
|
TwitchTvApiInterface twitchTvService = restAdapter.create(TwitchTvApiInterface.
class
);
|
使用API
发送API请求十分简单,只须要使用刚才建立的服务便可。
1
2
3
4
5
6
7
8
9
10
|
twitchTvService.getStreams(ITEMS_PER_PAGE, pageNumber * ITEMS_PER_PAGE,
new
Callback<List>() {
@Override
public
void
success(List justinTvStreamData, Response response) {
consumeApiData(justinTvStreamData);
}
@Override
public
void
failure(RetrofitError retrofitError) {
consumeApiData(
null
);
}});
|
这里有一点须要注意,Retrofit会在后台线程下载并解析API数据,根据结果不一样(成功或失败)发送到UI线程。Retrofit也支持在后台自动下载(这里没有显示)。
数据处理趣事
如今咱们用POJO数据作一些有趣的事情。在这个Demo中,展现了Twitch.Tv频道的图片和描述,使用Picasso Library 下载缓存图片。
参考代码
你有发现这类工做颇有趣吗?你是否喜好古朴的宾夕法尼亚雄鹿?你是一名出色的Android开发者吗? 欢迎联系咱们。