Android+Tomcat实现html解析基础
来源:互联网 发布:淘宝微商代理能挣钱吗? 编辑:程序博客网 时间:2024/05/22 02:20
前几天写了几篇博客和大家分享了Android开发中的一些经验。今天我们来看看另一个非常有实用价值的Android工具实例:Android端实现html网页的解析。
由于javaEE中继承了动态WEB类的开发环境,所以我们直接使用轻量级服务器Tomcat来完成网页部署,然后在安卓端上对页面内容进行获取。这个例子虽小,却是Android实现网络访问、数据获取与提交、流与字节相互转换等许多知识的基础。堪称经典范例。现在我们就来实现它。
【一】服务器端部署Web页面
首先先在eclipse的javaEE界面中新建一个Dynamic Web project,在WebContent目录中新建一个jsp的文件。
接着Run as---》 把工程部署在tomcat服务器上(此时若没有启动tomcat服务器也没有关系,新版本的jvaEE中,程序在部署时会发送开启命令)
这时,确定一下是否可以正常访问该页面:
我们还可以在箭头标注位置设置具体地址。成功后现在我们重点来看Android端的实现
PS:我们还可以再页面代码中修改charset值来选择页面编码,否则有可能显示乱码,这里我们采用UTF-8编码
【二】Android的数据流转换类的实现
首先理清思路后,我们发现,我们需要获取一个HTTP的连接池,然后得到一个inputstream的输入流,并把他转换为一个Byte数组。然后才能显示在界面上。为此,我们开发一个新类,实现上述功能。
*(当以后用到html解析时,这个类仍然有用,可以直接拷贝在工具类下作为常用方法)
以下是代码实现:
public class StreamTool {/** * 把一个inputstream里面的内容转化成一个byte[] */public static byte[] getBytes(InputStream is) throws Exception{ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while((len = is.read(buffer))!=-1){bos.write(buffer, 0, len);}is.close();bos.flush();byte[] result = bos.toByteArray();System.out.println(new String(result));return result;}}
我们声明了一个静态方法,方法接受InputStream的参数,然后利用新建的byte[] buffer,将InputStream中的内容读取到其中。之后再用write方法获取出buffer中的数据,传入到ByteArrayOutStream中,调用该类对象的toByteArray()方法,就能得到一个byte类型的数组了。
【三】建立连接,传递参数获取回传值
我们再新建一个工具类,在类中实现参数的传递与获取:
public class NetUtil {public static String getHtml(String address) throws Exception {URL url = new URL(address);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setReadTimeout(5000);conn.setRequestMethod("GET");int code = conn.getResponseCode();if (code == 200) {InputStream is = conn.getInputStream();byte[] result = StreamTool.getBytes(is);String temp = new String(result);// 简单描述原理// 真实的代码需要解析meta里面的信息if (temp.contains("gbk")) {return new String(result, "gb2312");} else {return temp;}} else {throw new IllegalStateException("访问网络失败");}}}
方法getHtml得到一个网络地址,然后建立连接,设置GET请求,由于连接返回的值是InputStream类型,所以我们正好可以使用上一步实现的getByte方法。
代码中的if语句的作用,是判断网页代码的编码格式,从而实现最佳的浏览体验。当然,这只是一个简单的实现范例,并没有仔细考虑效率和开销。不过大家有没有发现一些解码灵感~ XD
【四】交互前端的实现
很简单的一个线性布局,注册点击时间后就可以访问网络了:
public void onClick(View v) {switch (v.getId()) {case R.id.bt_view://按钮对应的点击事件 String address = mEtAddress.getText().toString().trim();if("".equals(address)){Toast.makeText(this, "地址不能为空", Toast.LENGTH_SHORT).show();return;}try {String html = NetUtil.getHtml(address);mTvView.setText(html);} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "获取数据失败", 0).show();}break;}}
*注意:填写网页地址时,由于我们是Android的真实网络环境,不能写Localhost,而要用自己的IP地址代替。不知道本机IP的朋友,可以在命令控制中输入 -ipconfig 就能获取到ipv4的地址。
ok了!,一个网页查看器就做成功了。在此基础上,大家还可以做许多扩展,例如图片查看、音乐下载...
源码已上传,地址见回复~
- Android+Tomcat实现html解析基础
- android基础--采用HTML实现软件界面
- Android Jsoup:实现HTML解析和Epub解析
- Android自动解析html带图片,实现图文混排
- android 实现textview 解析html 全部 ,中文,部分加粗
- android jsoup解析html
- android jsoup 解析 Html
- android html解析
- Android Html解析
- android 解析html网页
- android基础之html
- android 基础-自定义listView的实现 adapter 方法解析
- android中解析HTML文件
- Android 利用jsoup解析 html
- Android 利用jsoup解析 html
- Android中jsonp解析html
- Android 利用jsoup解析 html
- Android中解析html网页
- DBA嘉年华活动简介
- HDU 3397 线段树区间染色 区间查询
- 数据结构之 最小生成树
- 网络子系统26_设备传输的开启和关闭
- HDOJ 4342 —— 数学
- Android+Tomcat实现html解析基础
- Hibernate 的延迟加载【lazy】属性
- java编程思想笔记--类型信息部分一
- newton下山法
- Revolving Digits (扩展KMP)
- poj1734
- 误删表空间异机恢复
- 了解Google的指令集
- 求101~200之间的素数