在实际应用中,客户端要从网页上获取数据是常见的事,如果要解析网页上的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源代码总结的更多相关文章

  1. Android图片加载库:最全面的Picasso讲解

    前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Pica ...

  2. Android 动态加载 (一) 态加载机制 案例一

    在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...

  3. fackbook的Fresco (FaceBook推出的Android图片加载库-Fresco)

    [Android开发经验]FaceBook推出的Android图片加载库-Fresco   欢迎关注ndroid-tech-frontier开源项目,定期翻译国外Android优质的技术.开源库.软件 ...

  4. Android动态加载jar/dex

    前言 在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优 ...

  5. FaceBook推出的Android图片加载库-Fresco

    FaceBook推出的Android图片加载库-Fresco 原文链接:Introducing Fresco: A new image library for Android 译者 : ZhaoKai ...

  6. 深入浅出Android动态加载jar包技术

    在实际项目中,由于某些业务频繁变更而导致频繁升级客户端的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路,将核心的易于变更的业务封装在jar包里然后通过网络下载下来,再由 ...

  7. 【转载】cocos2dx 中 Android NDK 加载动态库的问题

     原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...

  8. Android系统加载Apk文件的时机和流程分析(1)--Android 4.4.4 r1的源码

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80982869 Android系统在启动时安装应用程序的过程,这些应用程序安装好之 ...

  9. Android ListView加载更多

    先看效果: ListView的footer布局: <?xml version="1.0" encoding="utf-8"?> <Relati ...

随机推荐

  1. WebComponent

    WebComponent 前言  最近加入到新项目组负责前端技术预研和选型,一直偏向于以Polymer为代表的WebComponent技术线,于是查阅各类资料想说服老大向这方面靠,最后得到的结果是:& ...

  2. iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用

    问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...

  3. Word2003中如何使封面和目录中不插入页码

    Word2003中如何使封面和目录中不插入页码?? 转载自: http://blog.zzedu.net.cn/user1/zhaoweijie/archives/2010/187266.html   ...

  4. caller和callee的区别

    ①.caller caller返回一个函数的引用,这个函数调用了当前的函数. 使用这个属性要注意: 1 这个属性只有当函数在执行时才有用 2 如果在javascript程序中,函数是由顶层调用的,则返 ...

  5. Java多线程初学者指南(4):线程的生命周期

    与人有生老病死一样,线程也同样要经历开始(等待).运行.挂起和停止四种不同的状态.这四种状态都可以通过Thread类中的方法进行控制.下面给出了Thread类中和这四种状态相关的方法. // 开始线程 ...

  6. bzoj 1023: [SHOI2008]cactus仙人掌图 tarjan缩环&&环上单调队列

    1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1141  Solved: 435[Submit][ ...

  7. 在ubuntu 10.04下编译ffmpeg

    最近准备研究ffmpeg-2.0.1. 那得先运行起来看看效果吧. 首先去官网下载源码: 然后 解压=> ./configure => make  OK . 1. 编译好后,发现没有ffp ...

  8. 因为中国队赢了,再撸一下DJANGO的官方文档吧

    对比一下,CBVS和FBVS,哪个方便? from django.shortcuts import render from django.http import Http404 from django ...

  9. 【HDU 4276】The Ghost Blows Light(树形DP,依赖背包)

    The Ghost Blows Light Problem Description My name is Hu Bayi, robing an ancient tomb in Tibet. The t ...

  10. 匿名hash

    [root@oadb test]# cat a1.pl use Data::Dumper; my @a=qw/1 3 5 7 9/; push @b ,{@a}; print Dumper(@b); ...