资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Android教程之开发移动 Web Ajax 应用,简介 手机浏览器与 WebKit 手机浏览器上的 Ajax WebKit 博客 清单 1. Feed 类 清单 2. News 类 清单 3. Item 类 清单 4. web.xml 配置文件 Ajax 构建的用户接口 清单 5. index.html 文件 清单 6. loadEntries 函数 清单 7. addEntry 函数 使用本地存储进行缓存 清单 8. 保存到本地存储 清单 9. 从本地存储加载数据 清单 10. 添加缓存到 loadEntries 函数,简介,尽管受到媒体追捧,但是开发移动设备应用很多年来一直都是高投入、低回报的工作。 基于 iPhone OS 和 Google Android 的最新一代智能手机提供了一个更简单的应用开发方法:Web 应用。 这种一次编译就可以支持所有设备的方法可以降低开发成本。更重要的是, 所有这些高端设备都具备支持高级 HTML、JavaScript 和 CSS 的超现代的浏览器。在本文中, 我们将学习如何开发充分利用现代智能手机功能的广泛使用 Asynchronous JavaScript and XML (Ajax) 技术的应用。 我们将不仅能了解到如何发挥这些设备的最大功效,同时还能学习到如何处理它们之间的细微差别。,本文阐述如何开发一个运行在 Apple iPhone 以及基于 Android 的智能手机上的移动 Web 应用。 开发这些设备上的移动 Web 应用,我们不能使用平常的桌面浏览器,至少不能完全只使用桌面浏览器。 我们还需要模拟器或实际的设备。对于 iPhone 来说,我们需要使用 iPhone 模拟器。它是 iPhone SDK 的一部分。本文所使用的是 iPhone SDK 3.1。类似地,我们也需要使用 Android SDK。它包含了一个 Android Virtual Device 管理器,这个管理器可以用来创建运行各个 Android 版本的 Android 模拟器。 其中本文使用的是 Android SDK 2.1。本文所用到的大部分代码是 JavaScript 代码,以及一些 HTML 和 CSS。 此外,应用还有一个使用 Java 实现的服务器端。这并不是强制性要求的,和其它的 Web 应用一样, 我们可以自己选择使用任意的服务器端技术。我们需要使用 Java 1.6 来运行本文所开发的应用。 另外我们还需要使用 Jersey,它是 JAX-RS 的参考实现,以及所有相关的 Java Archive (JAR) 文件。,手机浏览器与 WebKit,移动设备很多年就有 Web 浏览器了。然而,由于 Web 开发人员必须处理跨浏览器支持问题, 因此开发浏览器应用一直是很困难的。开发人员需要花费很多的时间来实现 HTML、JavaScript 和 CSS 在不同版本的浏览器上运行完全一致,如 Internet Explorer、Mozilla Firefox、Safari 等。 而桌面浏览器的问题几乎与手机浏览器中的问题如出一辙。不同版本的手机浏览器也是多得惊人。 每个设备制造商都拥有各自的浏览器,甚至来自相同厂商的设备在操作系统、屏幕大小等方面都有很大的差别。 有些浏览器只支持 WAP,而有一些则支持部分的 HTML,还有一些完全支持 HTML,但不支持 JavaScript。 幸好,现在情况已经大不相同了。到 2010 年 1 月,美国有超过 80% 的移动互联网流量都是通过 iPhone 或 Android 手机产生的。这两种操作系统不仅都是使用 WebKit 进行 HTML/CSS 渲染, 而且它们都是一样积极地使用 HTML 5 标准所采用的 JavaScript 引擎。没错。 移动领域的主流浏览器现在都使用了开放标准。这是 Web 开发人员所遇到的最好时机。,浏览器之间还是存在差别的,即使是不同版本的 iPhone 和 Android 也不例外。 其中 Android 浏览器差别最大。在 2.0 之前版本的 Android 上,Android 浏览器使用的是私有的 Google Gears 技术。虽然 Gears 有很多优秀的创新技术,现在已经包含在 HTML 5 标准中了。 然而,这意味着在很长的一段时间里,Android 浏览器是不支持其中一些 HTML 5 标准的, 但是我们还是能够使用 Gears 来实现一部分功能。本文的所有代码都是基于 HTML 5 标准并且是可以正常运行在 Android 2.0+ 或 iPhone 3.0+ 上的。 既然我们已经拥有了这些现代的基于 WebKit 的浏览器,接下来让我们来看看一些这些设备上的 Ajax。,手机浏览器上的 Ajax,像桌面 Web 应用一样,在移动 Web 应用上创建引人注目的用户体验的关键通常就是使用 Ajax。当然, 用户体验并不是使用 Ajax 的唯一原因;其中还可能涉及到速度和效率的原因。而后者恰恰是在移动 Web 应用上使用 Ajax 的更重要的原因所在,因为移动网络的延迟更大,而浏览器本身也受到处理器速度、 内存和缓存大小的限制。幸好,由于只需要关注于基于标准的浏览器,因此 Ajax 则恰好是许多因此变得更简单的技术之一。在详细讨论这个问题之前, 让我们先快速地了解一下本文所开发的应用所使用的后台服务器。 在开始之前,我们需要下载必要的 JAR 文件,其中包括 Jersey、Xerces、Rome 和 Google App Engine SDK 。然后将它们安装到下面的文件夹中:WebKitBlogwarWEB-INFlib。,WebKit 博客,本文的移动 Web 应用是一个简单的阅读移动 Web 开发新闻的应用。虽然目前它只是简单地从官方 WebKit 博客抓取 RSS 源,但是它可以经过简单地修改来收集多个 RSS 源。这个应用是一个普通的 Java Web 应用,它可以部署到任何一个 Java 应用服务器上。所有代码见清单 1。,清单 1. Feed 类,Path(/feed) public class Feed String surfinSafari = http:/webkit.org/blog/feed/; GET Produces(application/json) public News getNews(DefaultValue(0) QueryParam(after) long after) throws Exception URL feedUrl = new URL(surfinSafari); SyndFeedInput input = new SyndFeedInput(); SyndFeed feed = input.build(new XmlReader(feedUrl); List entries = new ArrayList(feed.getEntries().size(); for (Object obj : feed.getEntries() SyndEntry entry = (SyndEntry) obj; if (entry.getPublishedDate().getTime() after) Item item = new Item(entry.getTitle(), entry.getLink(), entry.getDescription().getValue(), entry.getPublishedDate().getTime(); entries.add(item); return new News(feed.getTitle(), entries); ,这个类使用 Java 的 JAX-RS 创建一个 RESTful 服务。Path 注释表示了服务的终端,即服务的相对 URL 是 /feed。GET 表示这个服务支持 HTTP GET。Produces 声明这个服务将生成 JSON 格式的数据。这是一个简单的以 JSON 格式序列化数据的方法。 方法 getNews 接收一个名为 after 的参数, 即获取一个特定日期之后的实体。这里也使用 JAX-RS 注释来将参数 after 绑定到查询字符参数 after 上。如果没有赋值,它会使用默认值 0。 到这里,我只阐述了 清单 1 中创建服务寻址和数据序列化的代码所用到的 JAX-RS 注释。该方法的主体实际上大部分依赖于处理 RSS 的 Rome 包。它只是下载最新的 RSS 源, 然后将它转换成我们应用所需要的数据,这里的数据就是 Item 和 News 这两类。其中唯一复杂的部分是文章的发表日期被转化为一个 long 值,并用作一个 ID。这是一个非常有用的 ID, 因为我们可以用它来进行排序,我们将在后面使用到。News 类如清单 2 所示。,清单 2. News 类,XmlRootElement public class News private String title; private List entries; / constructors, getters/setters omitted for brevity 注意 News 类使用了 JAXB 注释 XmlRootElement。 这个应用中不使用 XML,但是 JAX-RS 使用 JAXB 完成自动的序列化/反序列化。这个类只有一个标题属性和一组 Item。 Item 类如清单 3 所示。,清单 3. Item 类,XmlType public class Item private String title; private String link; private String description; private Long id; / constructors, getters/setters omitted for brevity 这个类包含的就是我们在 Web 应用中显示的内容。类似于 News 类, 它也使用 JAXB 注释,这样 JAX-RS 可以将它序列化成 JSON。这部分代码的最后一部分是配置 Web 应用的,以使请求能指向 JAX-RS。为了达到这个目的,我们需要编辑应用的 web.xml 文件, 如清单 4 所示。,清单 4. web.xml 配置文件, WebKit Blog Servlet com.sun.jersey.spi.container.servlet. ServletContainer com.sun.jersey.config.property.packages org.developerworks.mobile 1 WebKit Blog Servlet /resources/* ,30 index.html mf text/cache-manifest 这是最典型的 web.xml 代码。我们可以看到 servlet 声明,应用使用了 JAX-RS 的参考实现 Jersey。 Servlet 的初始化参数指示 Jersey 扫描 org.developerworks.mobile 包中被标记为处理服务请求的类。同时,任何映射到 /resources/ 的请求都将映射到 Jersey servlet。 这里最后需要注意的是文件最后的 mime-mapping 部分。这是 MANIFEST 文件的 MIME 类型, 也是我后面将讨论到的脱机 Web 应用的一个关键。既然我们已经了解了 Web 应用将使用到的后台服务, 接下来我们将了解它使用到的前台。,Ajax 构建的用户接口,清单 4 中我们可以看到应用有一个标准的 index.html 文件
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号