Androidクライアントでhtmlソースコードをロードする概要
5319 ワード
実際のアプリケーションでは、クライアントがWebページからデータを取得することはよくありますが、Webページのhtmlドキュメントを解析するには、まずhtmlソースコードを取得しなければなりません.その後、Jsoupを使用してDocumentドキュメントに変換して解析を行うのが一般的です.本稿では、Jsoupを使用してhtmlドキュメントをDocumentドキュメントに解析する方法について説明します.方法は6種類あります.jarはjsoup-1.6.1.jarを使用しています.コードは次のとおりです.
MainActivity:
レイアウトxml:
ネットワークへのアクセスとsdカードファイルの読み取り権限を加えてくださいね~.
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カードファイルの読み取り権限を加えてくださいね~.