在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 ...
随机推荐
- iBatis系列一
XML iBatis可以使用xml来作为参数输入以及结果返回:这个功能的优势在于某些特定的场景:还有可以通过DOM方式来作为参数传递:但是这个方式应用的比较少,如果服务器是xml服务器可以采用这种方式 ...
- IP,TCP,UDP Checksum校验
IP数据报的校验: IP数据报只需要对数据头进行校验,步骤如下: 将接收到的数据的checksum字段设置为0 把需要校验的字段的所有位划分为16位(2字节)的字 把所有16位的字相加,如果遇到进位, ...
- 关于BootStrap下图标的显示问题
我现在在做自己的毕业设计,用到了bootstrap的这一套css样式,说句心里话,这一套东西确实很好用,但是一个小问题足足浪费了我将近两个小时. 我的问题是:没有办法使用bootstrap下的图标(很 ...
- 记录利用ettercap进行简单的arp欺骗和mitm攻击过程
方法均来自网络,本人只是记录一下自己操作的过程,大神请无视之- 攻击主机平台:kali-linux 被攻击主机:安卓手机192.168.1.107 (在同一局域网内) 1.利用et ...
- Docker日志自动化: ElasticSearch、Logstash、Kibana以及Logspout
http://www.open-open.com/lib/view/open1432107136989.html
- 【UVA 10369】 Arctic Network (最小生成树)
[题意] 南极有n个科研站, 要把这些站用卫星或者无线电连接起来,使得任意两个都能直接或者间接相连.任意两个都有安装卫星设备的,都可以直接通过卫星通信,不管它们距离有多远. 而安装有无线电设备的两个站 ...
- 【POJ 3162】 Walking Race (树形DP-求树上最长路径问题,+单调队列)
Walking Race Description flymouse's sister wc is very capable at sports and her favorite event is ...
- 单位有b\B\K\M\G的相互转换
计算机存储计量单位 1. 计算机最小存储计量单位是:BIT(位) 2. 计算机最基本存储计量单位是:Bytes(字节) 3. Bit和Bytes的关系:8Bit=1Bytes 4. 其他常用单位:1K ...
- pdfminer的TextConverter得到文件字符无空格解决方法
from pdfminer.pdfinterp import PDFResourceManager, process_pdf from pdfminer.converter import TextCo ...
- perl 监控mysql 事务和锁
use DBI; use Net::SMTP; use HTTP::Date qw(time2iso str2time time2iso time2isoz); # mail_user should ...