原文来自于:http://blog.jobbole.com/65170/

写在前面

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

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

参考代码

示例代码下载

原文链接: meetme   翻译: 伯乐在线imesong

译文链接: http://blog.jobbole.com/65170/
转载必须在正文中标注并保留原文链接、译文链接和译者等信息。]

转:使用Android API最佳实践的更多相关文章

  1. Android开发最佳实践《IT蓝豹》

    Android开发最佳实践   移动开发Android经验分享应用GoogleMaterial Design 摘要:前 段时间,Google公布了Android开发最佳实践的一系列课程,涉及到一些平时 ...

  2. Android开发最佳实践

    Android开发最佳实践 摘要 ●使用 Gradle 和它推荐的工程结构 ●把密码和敏感数据放在gradle.properties ●不要自己写 HTTP 客户端,使用Volley或OkHttp库 ...

  3. 我所理解的Restful API最佳实践

    一直在公司负责API数据接口的开发,期间也遇到了不小的坑,本篇博客算是做一个小小的记录. 1. 不要纠结于无意义的规范    在开始本文之前,我想先说这么一句:RESTful 真的很好,但它只是一种软 ...

  4. ASP.NET Core Web API 最佳实践指南

    原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 介绍 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但是,你难 ...

  5. 我所认为的RESTful API最佳实践

    我所认为的RESTful API最佳实践 不要纠结于无意义的规范 在开始本文之前,我想先说这么一句:RESTful 真的很好,但它只是一种软件架构风格,过度纠结如何遵守规范只是徒增烦恼,也违背了使用它 ...

  6. [转]Android开发最佳实践

    ——欢迎转载,请注明出处 http://blog.csdn.net/asce1885 ,未经本人同意请勿用于商业用途,谢谢—— 原文链接:https://github.com/futurice/and ...

  7. js-新兴的API,最佳实践,离线应用于客户端存储

    离线应用于客户端存储: 1.离线检测:online以及offline事件,都是在window对象上触发 navigator.online为true的时候是表示设备能够上网 2.使用一个描述文件(man ...

  8. REST与RESTFul API最佳实践

    我经常会面试一些做PHP的开发者,让我很奇怪的是,10个人总有8个多不知道什么是REST服务,甚至是没有听说过.但RESTFul API已经是现在互联网里对外开放接口的主流模式,可参考: 豆瓣API  ...

  9. [转]ASP.NET Core Web API 最佳实践指南

    原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 转自 介绍# 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但 ...

随机推荐

  1. 【转载】运维小技巧:使用ss命令代替 netstat

    转自:https://www.91ri.org/12470.html ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类 ...

  2. servelt乱码问题(tomcat服务端编码为ISO-8859-1)

    Post的编码决定机制: <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...

  3. Rocketmq整体分析

    之前本人在实际的生产环境中,使用过activemq和rabbitmq消息队列,在使用过程中出现一些难以解决的问题,本文通过产品选型.网络架构和核心特性分析了rocketmq的优势和特性. 产品选型 我 ...

  4. 关于C++函数思考1(缺省的六大函数)

    我们知道大神们在设计C++时候就给C++有六个默认的函数,所谓默认就是,无需我们这些程序猿们动手去写,仅仅要你在将类实例化.即创建一个对象,在利用对象进行数据操作时候,就会编译器自己主动调用默认的函数 ...

  5. 合肥三洋股份,惠而浦家电携四大品牌-Take ,所有的市场

        大家都知道,数家电企业的日子并不好过.一方面,产品同质化竞争越发激烈.家电市场已进入了恶性价格战时代.还有一方面,消费者对家电产品的需求越发多元化.个性化.这意味着无法满足消费者需求的产品非常 ...

  6. getconf 取系统配制 --CPU

    cpu 缓存:getconf -a LEVEL1_ICACHE_SIZE LEVEL1_ICACHE_ASSOC LEVEL1_ICACHE_LINESIZE LEVEL1_DCACHE_SIZE L ...

  7. MVC模式下的数据展示:EasyUI的datagrid

    我的数据库设计是一张老师表teacher,一张学生表student,一个教师对应多个学生,在学生一方建立外键; 还有一点想清楚,需要展示的数据是根据什么来的,是成功登陆的用户的id?还是直接展示所有的 ...

  8. Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理

    一.传统的磁盘管理 其实在Linux操作系统中,我们的磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该 ...

  9. ASP.NET-FineUI开发实践-13(二)

    1.加图标和事件 上次已经通过DataSimulateTreeLevelField属性控制了树节点的显示,不用看也知道就是给指定列数据前面加个图标的HTML 可以在SimulateTreeHeper类 ...

  10. 关于html水平垂直居中的一些总结吧

    html水平垂直居中 最近遇到很多居中的问题,就花点时间总结了一下放在这里,以后找也方便,0.0~~ 1.居中文本 <div class="wrap"> 我在中间…… ...