作者:loto1115丨 | 来源:互联网 | 2023-08-07 21:40
概述随着移动互联网的发展,更多的内容需要从传统互联网延伸到移动终端呈现。一般的做法有三种:1.WebAPP:利用HTML5技术,例如JQuerymobile、DojoXmobile,在服
概述
随着移动互联网的发展,更多的内容需要从传统互联网延伸到移动终端呈现。一般的做法有三种:1. Web APP:利用 HTML5 技术,例如 JQuery mobile、DojoX mobile,在服务器端对网页进行移动优化。2. Hybrid APP:利用 HTML5 技术,以及 phonegap 等框架生成 APP,可以通过 phonegap 直接调用手机操作系统的 API,比如传感器,响铃等。3. 原生态 APP:将要显示的内容下载到本地,解析后重新布局并显示。
三种移动应用的优劣已经有很多文章进行比较,这里不再赘述。Web APP,Hybrid APP 其最大的优点在于跨平台,对于控制开发者成本来说是不二选择,但其缺点也比较明显,其在移动终端的用户体验不如原生态 APP。笔者认为,对于企业级用户,其对于用户体验要求不是很高,只是使用移动终端完成相应业务流程,那么使用 Web APP 或者 Hybrid APP 可以降低其开发成本,但对于个人用户,用户体验会比较挑剔,那么采用原生态 APP 才能在众多的应用中具有竞争力。
本文将着重讨论在原生态 APP 中,为了更好地显示网页内容,通过使用 HTML Parser 将网页内容进行提取,解析,并在 Android 应用中重新布局,最后以一个实例来讲解 HTML Parser 在 Android 中的使用。
回页首
HTML Parser 在 Android 中的使用
HTM Parser 是一个用来解析 HTML 文档的开放源码项目,提供了强大的 API 实现对 Html 网页进行信息转换 (Transformation) 以及从 HTML 文档里提取 (Extraction) 感兴趣的信息。它具有小巧、快速、使用简单的特点,并且经过严格的测试。
在 JavaEE 的应用中,可以直接从 HTML Parser 主页下载 htmlparser.jar,并将其导入 Build Path,即可以使用 htmlparser.jar 里定义的 API。但是这种方式在 Android 工程中并不适合,因为 Android 采用的是 Dalvik 虚拟机,而 htmlparser.jar 的编译是在传统 Oracle Java 虚拟机上完成编译的,所以将 htmlparser.jar 导入 Android 工程后并不能直接使用。
下面通过实例了解如何在 Android 工程中使用 HTML Parser,即创建 HTML Parser 的 Library 工程,并且将其导入到需要引用的 Android 应用中:
从 http://sourceforge.net/projects/htmlparser网站上下载 HTML Parser 的源代码;
创建一个 Android 工程,命名为 myHtmlParser。将 HTML Parser 的源代码导入该工程中,并移除源代码中的示例代码和单元测试代码;
将 myHtmlParser 工程设置为 Library 工程。方法为:右键工程 ->Properties->Android,勾选 Is Libaray 选项;
编译 myHtmlParser 工程;
在需要使用 HTML Parser 的项目中将 myHtmlParser 工程导入。即可使用 HTML Parser 提供的 API。
图 1. 创建 myHtmlParser 工程
图 2. 导入 HTML Parser 的源代码
图 3. 设置 myHtmlParser 工程为 Library 工程
回页首
HTML Parser 在 Android 中的应用实例
本文将以解析 DeveloperWorks 主页的最新推荐文章为例子,来详细阐述如何在 Android 项目中使用 HTML Parser。在这个例子中,创建一个 Android 应用,导入 HTML Parser Library 工程,通过 HTML Parser 获取 DeveloperWorks 主页信息,并且将 DeveloperWorks 主页上最新推荐的文章名称解析出来,将推荐文章列表显示在一个 ListView 中。(附源代码)
图 4. DeveloperWorks 主页上最新推荐文章列表
实现步骤如下:
1. 创建示例工程,命名为 dwParser,将 myHtmlParser 作为 Library 导入到该工程中。右键工程 ->Properties->Android,添加 myHtmlParser 作为引用工程。
图 5. 将 myHtmlParser 导入 dwParser 工程
2. 打开工程中的 manifest 文件,添加声明网络访问的权限。方式为添加 uses-permission 节点,并设置
android:name 的属性值为 android.permission.INTERNET
清单 1. manifest 文件里添加声明网络访问的权限
package="com.example.androidtest" android:versiOnCode="1" android:versiOnName="1.0"> android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme">
3. 添加 ListView 控件到布局文件中,用来存放解析出来的 Developerworks 主页上最新推荐的文章列表。修改 MyMainActivity 类型的文件,使其继承于 ListActivity。
清单 2. 添加 ListView 控件到布局文件中
xmlns:tools="http://schemas.android.com/tools" android:layout_ android:layout_ > android:layout_ android:layout_ android:layout_weight="1" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:background="@android:color/transparent" />
清单 3. 创建 ListView,并修改 MyMainActivity 类型的文件
public class MyMainActivity extends ListActivity { private ArrayAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List postTitleList = new ArrayList(); try { // 通过 HTMLParser 获取推荐文章题目列表,存放于 postTitleList 中 postTitleList = parserDwPost(); } catch (ParserException e) { e.printStackTrace(); } // 初始化 ListView 的 adapter 完成在 Android 界面上的显示 adapter = new ArrayAdapter(this, R.layout.dw_post_item); if(postTitleList != null && postTitleList.size() > 0) { for(String title : postTitleList) { // 将 postTitleList 里面的内容显示在 listview 中 adapter.add(title); } } setListAdapter(adapter); } }
4. 打开 DeveloperWorks 主页的网页源代码,可以发现
其最新推荐文章列表是包含在“”连接标签之中。
每一个文章题目是包含在一个“ ”标签中。
文章题目是一个连接标签
这样通过 HTML Parser 找到“
”标签,直接使用 HTML Parser 的接口,查询处于“
”标签中的连接文字即可。关于详细 HTML Parser 的使用方法以及接口说明请查看附录资源。
清单 4. HTMLParser 解析网页实现代码:
private List parserDwPost() throws ParserException{ final String DW_HOME_PAGE_URL = "http://www.ibm.com/developerworks/cn"; ArrayList pTitleList = new ArrayList(); // 创建 html parser 对象,并指定要访问网页的 URL 和编码格式 htmlParser = new Parser(DW_HOME_PAGE_URL); htmlParser.setEncoding("UTF-8"); String postTitle = ""; // 获取指定的 div 节点,即 标签,并且该标签包含有属性 id 值为“tab1” NodeList divOfTab1 = htmlParser.extractAllNodesThatMatch( new AndFilter(newTagNameFilter("div"), new HasAttributeFilter("id", "tab1"))); if(divOfTab1 != null && divOfTab1.size() > 0) { // 获取指定 div 标签的子节点中的
节点 NodeList itemLiList = divOfTab1.elementAt(0).getChildren().extractAllNodesThatMatch (new TagNameFilter("li"), true); if(itemLiList != null && itemLiList.size() > 0) { for(int i = 0; i // 在 节点的子节点中获取 Link 节点 NodeList linkItem = itemLiList.elementAt(i).getChildren().extractAllNodesThatMatch (new NodeClassFilter(LinkTag.class),true); if(linkItem != null && linkItem.size() > 0) { // 获取 Link 节点的 Text,即为要获取的推荐文章的题目文字 postTitle = ((LinkTag)linkItem.elementAt(0)).getLinkText(); System.out.println(postTitle); pTitleList.add(postTitle); } } } } return pTitleList; }
5. 运行 Android 工程,ListView 里显示 DeveloperWorks 主页上推荐的最新文章 , 每一个 ListItem 显示一条推荐文章的题目。
图 6. 在 Android 应用中显示 DeveloperWorks 主页的最新推荐文章
回页首
总结
本文讲述了如何在 Android 应用中使用 HTML Parser 来解析网页内容,利用 Android 中 Library 工程,将 HTML Parser 源代码下载并且导入到一个 Android Library 工程中,在需要使用 HTML Parser 的工程中导入 HTML Parser Library 工程,并通过一个小的示例展示了其使用方式和基本功能,希望能够达到抛砖引玉的作用。
参考资料
学习
请参考 developerWorks 文章 从 HTML 中攫取你所需的信息,了解相关内容。
请参考 HTML Parser 项目首页,了解 HTML Parser 开源项目。
请从 HTML Parser 源代码下载地址下载 HTML Parser。
关于 Android 内容,参考专题:Android 开发从入门到精通。
开发基于 Google Map 的 Android 应用是一篇针对移动地图的文章。
随时关注 developerWorks 技术活动和 网络广播。
访问 developerWorks Open source 专区获得丰富的 how-to 信息、工具和项目更新以及 最受欢迎的文章和教程,帮助您用开放源码技术进行开发,并将它们与 IBM 产品结合使用。
推荐阅读
Adobe系统公司(纳斯达克股票代码:ADBE)本周三宣布其Adobe数字营销套件的组件网络体验管理(WebExperienceManagement,WEM)解决方案 ...
[详细]
蜡笔小新 2023-09-23 03:07:59
《HTML5移动web开发指南》,是UC公司著名前端开发师唐俊开(网名:三桥)的新书,介绍了jquerymo ...
[详细]
蜡笔小新 2023-09-25 14:14:25
本文详细介绍了Java集合框架中的Collection体系,包括集合的基本概念及其与数组的区别。同时,深入探讨了Comparable和Comparator接口的区别,并分析了各种集合类的底层数据结构。最后,提供了如何根据需求选择合适的集合类的指导。 ...
[详细]
蜡笔小新 2024-12-18 18:29:09
本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ...
[详细]
蜡笔小新 2024-12-18 13:07:47
本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ...
[详细]
蜡笔小新 2024-12-18 10:41:24
本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ...
[详细]
蜡笔小新 2024-12-17 19:02:43
本文在前两篇文章的基础上,进一步指导读者如何在IntelliJ IDEA中创建和配置多模块Maven项目。通过详细的步骤说明,帮助读者掌握项目模块化管理的方法。 ...
[详细]
蜡笔小新 2024-12-17 13:43:13
本文深入探讨了WebGL与Three.js在构建多样化3D场景中的应用,详细解析了两者如何协同工作以实现高性能的3D渲染,并提供了实践指南。 ...
[详细]
蜡笔小新 2024-12-17 12:54:15
随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ...
[详细]
蜡笔小新 2024-12-17 11:15:55
当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ...
[详细]
蜡笔小新 2024-10-31 10:28:12
MyModernMetropolis,这个是我很喜欢的一个网站,细心的朋友会发现DDDesign有一部分文章是来自这里,如果你寻找创意灵感,这个也许是个很好的开始。2.FFFFou ...
[详细]
蜡笔小新 2023-10-10 16:41:31
HybridApp在过去的两年中已经成为移动界的核心话题,但是作为一名Web开发者来说要如何站在移动互联网的浪潮之巅呢?是选择学习原生开发,研究Java、Object-C、C#等语言,还是 ...
[详细]
蜡笔小新 2023-09-25 19:22:47
DH-UAP是西安大华时代网络科技有限公司开发的新一代应用开发、运行、维护平台。该平台提供了技术统一、架构合理、性能高效、安全可靠的企业级信息系统基础框架和组件库,支 ...
[详细]
蜡笔小新 2023-09-18 22:16:09
web前端|H5教程phonegap,本地存储web前端-H5教程下面小编就为大家带来一篇使用phonegap进行本地存储的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做 ...
[详细]
蜡笔小新 2023-09-18 20:49:29
软件测试对于减少程序BUG有多大帮助?有经验的程序员通常认为测试与代码同等重要,测试可以减少代码变更或扩展的不确定性。测试应该方便阅读简单且能快速运行 ...
[详细]
蜡笔小新 2023-10-15 20:15:19