Androidクライアントでhtmlソースコードをロードする概要

5319 ワード

実際のアプリケーションでは、クライアントがWebページからデータを取得することはよくありますが、Webページの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カードファイルの読み取り権限を加えてくださいね~.