文档章节

使用Android API最佳实践

m
 mingxun
发布于 2014/04/17 13:36
字数 1407
阅读 117
收藏 8

本文由 伯乐在线 - imesong 翻译自 meetme。欢迎加入Android小组。转载请参见文章末尾处的要求。

写在前面

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

做什么,如何做?

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

学习

Retrofit

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

1
2
@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. 下载RetrofitOKHttpGSON库文件。

  2. 逐个添加jar文件到你的工程中。

  3. 如果使用Android Studio,可以使用gradle同步这个工程。

查找或者编写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数据的根元素是个数组,不是对象。所以我只贴出了数组的第一个元素。展示相关的图片示例。

POJO-Generator

集成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 {
@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服务,发送请求。

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

TwitchClient-576x1024

参考代码

示例代码下载

感觉有趣吗?

你有发现这类工作很有趣吗?你是否喜爱古朴的宾夕法尼亚雄鹿?你是一名出色的Android开发者吗? 欢迎联系我们


本文转载自:http://blog.jobbole.com/65170/

共有 人打赏支持
m
粉丝 3
博文 138
码字总数 9074
作品 0
崇明
十大技巧快速提升Android应用开发性能

  一个应用程序要想开发成功,质量至关重要。用户要求它们决定安装到自己设备上的Android应用程序反应迅即、性能合理。如果应用程序未能提供好用的功能和稳定的用户体验,那么很快就会被卸...

aineice
2015/08/21
88
0
Android模拟表单提交(上传文件)

通过form表单进行上传文件 <html><body><form action="upload_file.php" method="post"enctype="multipart/form-data"><label for="file">Filename:</label><input type="file" name="file" ......

军歌
2014/02/19
0
0
[Android] 提升Android应用开发性能的十大要点

虽然Android智能手机和平板电脑的速度一天比一天快,但是开发者必须记住一点:他们开发的应用程序仍在一种资源紧张的环境下运行,这种环境主要依赖性能与最新的台式机或笔记本电脑无法比拟的...

android技术开发
2013/07/26
253
1
提升Android应用开发性能的十大要点

虽然Android智能手机和平板电脑的速度一天比一天快,但是开发者必须记住一点:他们开发的应用程序仍在一种资源紧张的环境下运行,这种环境主要依赖性能与最新的台式机或笔记本电脑无法比拟的...

带梦想一7飞
2012/08/24
0
0
开发者必知:提升Android应用开发性能的十大要点

随着任何一个移动平台不断发展、围绕它的应用程序不断改进,要想开发成功,质量变得至关重要。如今,用户们要求他们决定安装到自己设备上的Android应用程序反应迅即、性能合理。如果那些应用...

冯京宝
2012/07/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

go语言学习总结

一、描述 go语言是直接将源码编译成二进制机器码的语言;它支持面向对象、也支持函数式编程;支持并发很容易; 二、基本语法学习路径 https://studygolang.com/subject/2...

盼望明天
19分钟前
1
0
JSP 九大内置对象及其作用域

JSP 中一共预先定义了 9 个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception ,下面就简单介绍下。 1、request 对象 request 对象...

几个栗子
31分钟前
0
0
Java中的坑之方括号

Java中的坑之方括号 这一段时间,在做项目的时候,发现了一个坑,这个坑说大不大,说小不小,不知道的足够喝一壶,知道的就可以轻松解决。 问题描述 在做数据统计的时候,遇见了如下形式的数...

星汉
41分钟前
1
0
[雪峰磁针石博客]python机器学习、web开发等书籍汇总

Building Machine Learning Systems with Python Third Edition - 2018.pdf 下载地址 Get more from your data by creating practical machine learning systems with Python Key Features ......

python测试开发人工智能安全
52分钟前
1
0
文件的压缩与解压(linux)

Linux下*.tar.gz文件解压缩命令 1.压缩命令:   命令格式:tar -zcvf 压缩后文件名.tar.gz 被压缩文件名 可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。 2.解压缩命令: ...

qimh
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部