零、前言

今天,我们生活在一个日益以数据为中心和数据驱动的世界。我们生活在这样一个世界里,像亚马逊这样的公司跟踪我们看到的每一件商品和购买的每一件商品,以便向我们推荐类似的产品。我们生活在这样一个世界里,像谷歌这样的公司存储向他们抛出的每一个搜索查询,以便在未来推荐更好的搜索查询。我们生活在这样一个世界里,像脸书这样的社交媒体网站会记住我们与朋友分享的每一件事和每一个想法,以便更好地了解他们数亿用户中的每一个人。我们生活在一个越来越以数据为中心的世界,因此我们必须从以数据为中心的角度开发应用。

看看你周围——智能手机和平板电脑等移动设备的增长在过去几年中呈爆炸性增长。这本书旨在探索数据和安卓,快速深入了解谷歌员工在安卓操作系统中构建的各种方法。这本书不仅努力向您展示所有可用的不同数据存储方法,还努力阐明每种方法的优缺点。在本书的最后,我的目标是让您能够设计出一个高效、设计良好、可扩展的以数据为中心的应用。

这本书涵盖了什么

第 1 章在安卓上存储数据,重点介绍安卓上所有不同的本地数据存储方式。它提供了每种存储方法的大量代码示例,并比较了每种方法的优缺点。

第 2 章使用一个 SQLite 数据库,通过引导您实现一个定制的 SQLite 数据库,更深入地了解最复杂和最常用的本地数据存储形式——SQLite 数据库。

第 3 章SQLite 查询,旨在粗略概述一下 SQL 查询语言。它教读者如何构造强大的数据库查询,然后可以与任何 SQLite 数据库一起使用。

第 4 章使用内容供应器,通过向读者展示如何通过使用内容供应器向整个安卓操作系统公开他/她的数据库,扩展了之前的 SQLite 数据库章节。它引导读者了解内容提供者的完整实现,并以公开数据的好处的简短讨论结束。

第 5 章查询联系人表,致力于探索安卓操作系统提供的最广泛使用的内容供应器——联系人内容供应器。它探讨了联系人表的结构,并提供了常见查询的示例。

第 6 章绑定到 UI ,讲述了用户可以将数据绑定到用户界面的方式。由于数据通常显示为列表,本章将介绍两种类型的列表适配器的实现。

第 7 章安卓数据库在实践中,试图远离编程,专注于更高层次的设计理念。它讨论了到目前为止讨论的所有本地存储方法的使用方式,也强调了这种本地方法的缺点——为接下来的几章打开了大门,我们将关注外部数据存储。

第 8 章探索外部数据库,介绍了使用外部数据库的概念,并列出了读者可以使用的一些常见外部数据存储。本章以一个如何建立谷歌应用引擎数据存储的例子结束。

第 9 章收集和存储数据,通过讲述应用可以去收集数据的方式来扩展前一章的开发,然后可以将数据插入到新的外部数据库中。收集数据的方法包括使用可用的 API,以及编写定制的网页抓取器。

第 10 章将它组合在一起,通过向读者展示如何首先创建 HTTP servlet,然后从移动应用向这些 HTTP servlet 发出 HTTP 请求,完成了我们在前两章中启动的应用。这一章是这本书的高潮,向读者展示了如何将他们的移动应用与他们的外部数据库连接起来,并最终解析和显示作为列表的 HTTP 响应。

这本书你需要什么

这本书的要求包括安卓操作系统的工作知识,能够创建安卓和谷歌应用引擎项目(即 Eclipse)的编程集成开发环境,以及能够进行基本网络请求的稳定互联网连接。

这本书是给谁的

这本书面向对数据库和其他后端设计概念有一定经验的开发人员,但他们可能希望看到这些概念应用于移动应用。对移动应用和/或安卓平台有经验,但对后端系统和设计/实现数据库模式不太熟悉的开发人员也会发现这本书很有用。

即使对于那些已经在安卓编程和数据库实现方面有经验的人来说,这本书也可能有助于进一步固化概念,并在安卓上呈现更广泛的数据存储方法。

惯例

在这本书里,你会发现许多区分不同种类信息的文本风格。以下是这些风格的一些例子,以及对它们的含义的解释。

文本中的码字如下所示:“然后,它将我们想要写入的字符串转换为字节形式,并将其传递到输出流的 write()方法中。”

代码块设置如下:

Set<String> values = new HashSet<String>();
values.add("Hello");
values.add("World");
Editor e = sp.edit();
e.putStringSet("strSetKey", values);
e.commit();
Set<String> ret = sp.getStringSet(values, new HashSet<String>());
for(String r : ret) {
Log.i("SharedPreferencesExample", "Retrieved vals: " + r);
}

当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:

<uses-sdk android:minSdkVersion="5" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

任何命令行输入或输出都编写如下:

adb -s emulator-xxxx shell

新名词重要词语以粗体显示。

警告或重要提示会出现在这样的框中。

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或可能不喜欢什么。读者反馈对我们开发您真正能从中获得最大收益的标题非常重要。

要给我们发送一般反馈,只需向<[feedback@packtpub.com](mailto:feedback@packtpub.com)>发送电子邮件,并通过您消息的主题提及书名。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参阅我们在www.packtpub.com/authors上的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您在http://www.packtpub.com的账户中下载您购买的所有 Packt 书籍的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

勘误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现了错误——可能是文本或代码中的错误——如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/support,选择您的书籍,点击勘误表提交表链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将被上传到我们的网站,或添加到该标题的勘误表部分下的任何现有勘误表列表中。

盗版

互联网上版权材质的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽最大努力解决。