在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 ...
随机推荐
- Mac下获取AppStore安装包文件路径
通过远在大洋彼岸的苹果服务器下载东西,确实有够慢啊!AppStore更甚:甚至都经常提示连不上服务器,而有些软件呢,还必须从AppStore下载安装,所以没办法,谁让上了苹果的贼船呢!公司的网速更是不 ...
- nump中的为随机数产生器的seed
在python的程序中,发现了如下的伪随机数产生的代码 rng = numpy.random.RandomState(23355) arrayA = rng.uniform(0,1,(2,3)) 该段 ...
- python学习之--内置函数:
Python内置函数: Python内置了很多有用的函数,我们可以直接调用.要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数. 1. 内置函数调用之--abs()函数: ...
- XMLHttpRequest2的进步之处
本文参考自:XMLHttpRequest2 新技巧 (重点保留demo,方便自己日后查阅) HTML5是现在web开发中的热点,虽然关于web app和local app一直有争论,但是从技术学习的角 ...
- App小样在手机运行了一下
外包公司把App小样的安装包发过来了,我在安卓手机上试了一把,虽然还只有几个静态页面,但安装那一刻还是小激动了一把. 在某美术系MM的帮助下,我基本掌握了原型软件azure. 事实证明,很多东西都是逼 ...
- 李洪强iOS开发Swift篇---12_NSThread线程相关简单说明
李洪强iOS开发Swift篇---12_NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThre ...
- 再探CRC
之前写了CRC16的程序,虽说能用,却不知其所心然,现在要用CRC32,重温一遍,一下就通了.笔记如下 CRC我没记错的话是Cyclic Redundancy Code,Cyclic和Redundan ...
- Learning WCF Chapter1 Hosting a Service in IIS
How messages reach a service endpoint is a matter of protocols and hosting. IIS can host services ov ...
- FindBugs
FindBugs是一个能静态分析源代码中可能会出现Bug的Eclipse插件工具. 可以从http://sourceforge.net/project/showfiles.php?group_id=9 ...
- awk将普通文本转换成json文件
script1: #!/bin/bash #Date:-- #Author:eivll0m awk -F"\t" -vq='"' '{ a[$]=a[$]?a[$]:$ ...