在android客户端加载html源代码总结
在实际应用中,客户端要从网页上获取数据是常见的事,如果要解析网页上的html文档,那么首先得获取html源码,然后现在一般使用Jsoup来转换成Document文档来进行解析,本文主要讨论如何使用Jsoup把html文档解析成Document文档,方法归纳了6种,jar使用的是jsoup-1.6.1.jar,代码如下:
MainActivity:
package com.home.gethtml; import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection; import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity implements OnClickListener {
private Button btn;
private EditText showText;
private Handler handler;
private Document doc; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.main_btn);
btn.setOnClickListener(this);
showText = (EditText) findViewById(R.id.main_et);
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
showText.setText(doc + "");
}
};
} @Override
public void onClick(View v) {
if (v == btn) {
new Thread() {
public void run() { // 1.直接从字符串中输入HTML文档
// String html =
// "<html><head><title> 测试html的加载 </title></head>"
// + "<body><p> 这是一篇使用jsoup来加载html的文章 </p></body></html>";
// doc = Jsoup.parse(html);
// handler.sendEmptyMessage(0); // 2.1 从 URL直接加载 HTML文档
// try {
// doc =
// Jsoup.connect("http://blog.csdn.net/u010142437").get();
// handler.sendEmptyMessage(0);
// } catch (IOException e) {
// e.printStackTrace();
// } // 2.2 从 URL直接加载 HTML文档
// try {
// doc = Jsoup.connect("http://blog.csdn.net/u010142437")
// .data("query", "Java") // 请求参数
// .userAgent("I’m jsoup") // 设置 User-Agent
// .cookie("auth", "token") // 设置 cookie
// .timeout(5000) // 设置连接超时时间
// .post(); // 使用 POST方法访问 URL
// handler.sendEmptyMessage(0);
// } catch (IOException e) {
// e.printStackTrace();
// } // 2.3从 URL直接加载 HTML文档
// try {
// doc = Jsoup.parse(new URL(
// "http://blog.csdn.net/u010142437"), 5000);
// handler.sendEmptyMessage(0);
// } catch (MalformedURLException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// } // 2.4从 URL直接加载 HTML文档:先使用流读取html,然后使用Jsoup转换成Document文档
// String html =
// getHtmlString("http://blog.csdn.net/u010142437");
// // 再使用第一种方式
// doc = Jsoup.parse(html);
// handler.sendEmptyMessage(0); // 3.从sd卡文件中加载 HTML文档
File file = new File("/mnt/sdcard/test.html");
try {
// 第三个参数是baseURL,当 HTML文档使用相对路径方式引用外部文件时,jsoup会自动为这些
// URL加上baseURL这个前缀 。
doc = Jsoup.parse(file, "UTF-8",
"http://blog.csdn.net/");
handler.sendEmptyMessage(0);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start(); } } /**
* 使用URLConnection根据url读取html源代码
*
* @param urlString
* @return
*/
private String getHtmlString(String urlString) {
try {
URL url = new URL(urlString);
URLConnection ucon = url.openConnection();
InputStream instr = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(instr);
ByteArrayBuffer bau = new ByteArrayBuffer(500);
int current = 0;
while ((current = bis.read()) != -1) {
bau.append((byte) current);
}
return EncodingUtils.getString(bau.toByteArray(), "utf_8");
} catch (Exception e) {
return "";
}
}
}
布局xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <Button
android:id="@+id/main_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="加载" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="html源码:" /> <EditText
android:id="@+id/main_et"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:editable="false" /> </LinearLayout>
记得加上访问网络和读取sd卡文件的权限哦~。
在android客户端加载html源代码总结的更多相关文章
- Android图片加载库:最全面的Picasso讲解
前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Pica ...
- Android 动态加载 (一) 态加载机制 案例一
在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...
- fackbook的Fresco (FaceBook推出的Android图片加载库-Fresco)
[Android开发经验]FaceBook推出的Android图片加载库-Fresco 欢迎关注ndroid-tech-frontier开源项目,定期翻译国外Android优质的技术.开源库.软件 ...
- Android动态加载jar/dex
前言 在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优 ...
- FaceBook推出的Android图片加载库-Fresco
FaceBook推出的Android图片加载库-Fresco 原文链接:Introducing Fresco: A new image library for Android 译者 : ZhaoKai ...
- 深入浅出Android动态加载jar包技术
在实际项目中,由于某些业务频繁变更而导致频繁升级客户端的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路,将核心的易于变更的业务封装在jar包里然后通过网络下载下来,再由 ...
- 【转载】cocos2dx 中 Android NDK 加载动态库的问题
原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...
- Android系统加载Apk文件的时机和流程分析(1)--Android 4.4.4 r1的源码
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80982869 Android系统在启动时安装应用程序的过程,这些应用程序安装好之 ...
- Android ListView加载更多
先看效果: ListView的footer布局: <?xml version="1.0" encoding="utf-8"?> <Relati ...
随机推荐
- python中的单下划线和双下划线意义和作用
Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数).例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以 ...
- python的方法总结:
1. Python的字典的items(), keys(), values()都返回一个list >>> dict = { 1 : 2, 'a' : 'b', 'hello' : 'w ...
- Sectong日志分析
http://tech.uc.cn/?p=2866#comments http://blog.sectong.com/blog/hw_bigdata.html
- POJ 2409 Let it Bead(Polya定理)
点我看题目 题意 :给你c种颜色的n个珠子,问你可以组成多少种形式. 思路 :polya定理的应用,与1286差不多一样,代码一改就可以交....POJ 1286题解 #include <std ...
- 李洪强漫谈iOS开发[C语言-029] - 关系运算符
- 转:三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)
http://blog.csdn.net/liujun13579/article/details/7772215 边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH ...
- Android推送通知指南
Android推送通知指南 在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是 ...
- C#面向对象——方法的重载及构造函数、静态对象。
namespace nameclass2 { class Class2 //方法的重载 { public void Function( string s) { Console.WriteLine(s) ...
- bzoj2333
好题,先离线把连通块变成连续的区间每次连通块合并就相当于两个区间合并这样就轻易的用线段树解决了 type node=record wh:string[]; x,y:longint; end; ..*] ...
- flexPaper +swftools实现文档在线阅读
网上已有很多FlexPaper仿百度文库的一些文章,园子里也有很多大牛的详细教程. 结合这次做的例子,在这里详细记录一下使用Flexpaper实现仿百度文库的效果,及自己在跟着园子里的教程做的时候,遇 ...