Android API 最佳使用实践与学习

日期: 2014-04-17 来源:TechTarget中国 英文

现在,Android应用程序中集成第三方API已十分流行。应用程序都有自己的网络操作和缓存处理机制,但是大部分比较脆弱,没有针对网络糟糕情况进行优化。感谢Square lnc 这家有创新精神的公司,将信用卡商业交易带到手机上。现在有了一系列高质量开源库,支持在Android应用程序中集成。

做什么,如何做?

现在,我们要依次学习使用Retrofit、OKHttp和GSON,简单快速的集成REST API。使用这个组合,我们需要从Twitch.tv下载并解析一些数据。跟着下面的步骤可以在几分钟内,不用写繁琐的模板代码,完成大部分的REST API集成。

学习

Retrofit

Retrofit简化了从Web API下载数据,解析成普通的Java对象(POJO)。例如,要从GitHub 上下载用户仓库的信息,你只需要编写下面的几行:

@GET(“/users/{user}/repos”) List listRepos(@Path(“user”) String user); 另外,你需要创建仓库信息类和数据类型。这些代码也可以自动生成,下面会介绍如何自动生成。

整个过程很简单,类似发送一次有参数的请求或发送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数据。

开始Coding

添加库文件到工程

  1. 下载Retrofit、OKHttp、GSON库文件。
  2. 逐个添加jar文件到你的工程中。
  3. 如果使用Android Studio,可以使用gradle同步这个工程。
  4. 查找或者编写API

你可能已有一份API,如果你还在寻找API目录,我推荐ProgrammableWeb。在这个教程中,我们会解析Twitch.Tv的数据流。请求格式请参考说明手册。Twicht.tv请求数据流的JSON格式:

http://api.justin.tv/api/stream/list.json

展示输出

展示一些API返回的数据,下面的示例是由于是一个GET请求,只能在浏览器中运行,返回数据如下:

[{“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-600×600.jpeg”, “timezone”: “Europe/Madrid”, “screen_cap_url_huge”: “http://static

创建POJO

这部分很有趣,用我们获取到的数据自动创建对应的POJO。使用jsonschema2pojo,导入包名、类名和JSON数据,保存为私有类型。示例中展示的构造器无法使用,因为JSON数据的根元素是个数组,不是对象。所以我只贴出了数组的第一个元素。展示相关的图片示例。

集成POJOs

将自动产生的POJOs粘贴到工程中就可以了。在我的示例工程中,他们在models包中。

使用Retrofit下载(解析)API

创建REST Adapter

创建Adapter,类似设置endPoint。

RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(“http://api.justin.tv/api“) .build(); 定义API接口

为需要连接的endPoint定义接口。下面示例中,使用limit和offset,这两个参数用来控制请求数据位置和大小。详细说明请参考API文档。

public interface TwitchTvApiInterface { @GET(“/stream/list.json”) void getStreams(@Query(“limit”) int limit, @Query(“offset”) int offset, Callback<List> callback);} 你可能会注意到,我们期望返回的是一组JustinTvStreamData对象,也就是我们刚才自动产生的POJO。关于如何定义这个接口的更多信息,请参考Retrofit说明文档。

创建Twitch.tv 服务

现在我们已经建立了endPoint,定义了需要的接口。下面需要创建Twitch.TV服务,发送请求。

TwitchTvApiInterface twitchTvService = restAdapter.create(TwitchTvApiInterface.class) 使用API

发送API请求十分简单,只需要使用刚才创建的服务即可。

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 下载缓存图片。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 数字化转型:如何更好地利用API和微服务

    API,即应用程序编程接口,它提供给应用程序、开发人员访问其它应用的能力,而又无需访问源码,无需理解内部工作机制细节;简单地说,API就是实现应用与应用连接的一种隐形的桥梁。

  • 金融行业数字转型:利用API构建新IT基础

    从制造业、物流业,银行业到零售业,各行各业的根基都因应用经济的兴起发生着深刻的变革。在互联网和智能手机普及化的推动下,这种现象变得司空见惯。到2021年 ,蓬勃发展的全球应用经济的预估总值将达到6.3万亿美元,相比2016年的1.3万亿美元,增长近5倍。

  • 如何使用Azure API管理服务?

    在云和微服务架构时代,API是数字化业务的通用语言。根据分析公司Forrester Research预测,仅在美国,API管理工具的支出将在未来5年内达到近30亿美元。

  • 私有存储云如何构建?

    如何构建自己的私有存储云呢?在这之前,我们要先退后一步,思考一下云计算到底意味着什么。