简单网页源码查看器

新建一个Android应用,命名为htmlview

MainActivity.java

MainActivity.java

package com.example.htmlview;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {	
	private EditText path;
	private Button button;
	private TextView text;
	public String t = null;
	private Handler mHandler;//声明一个用于处理消息的Handler类的对象

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		path = (EditText)findViewById(R.id.path);
		button = (Button)findViewById(R.id.ok);
		text = (TextView)findViewById(R.id.text);
		text.setMovementMethod(ScrollingMovementMethod.getInstance());
		button.setOnClickListener(new OnClickListener() {			
			public void onClick(View v) {				
				final String url = path.getText().toString();
				Toast.makeText(MainActivity.this, "编辑器里面输入的是:"+url, Toast.LENGTH_SHORT).show();
				Thread th = new Thread() {
					public void run() {
						try {
							t = getHtml(url);
							Message m = new Message();
							if(t != null) {
								m.what = 0x111;
								mHandler.sendMessage(m);//发送消息
							}else {
								m.what = 0x110;
								mHandler.sendMessage(m);//发送消息
								return;
							}
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}	
					}
				};
				th.start();
				mHandler = new Handler() {
					public void handleMessage(Message mg) {
						if(mg.what == 0x111) {
							text.setText(t);
						}else {
							Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
						}
						super.handleMessage(mg);
					}
				};
			}
		});
	}
	//获取网页html源代码;path 网页路径
	public static String getHtml(String path) throws Exception {
		//将path包装成一个URL对象
		URL url = new URL(path);
		//设置超时时间
		HttpURLConnection con = (HttpURLConnection) url.openConnection();
		con.setConnectTimeout(5000);//单位为ms
		//设置请求方式
		con.setRequestMethod("GET");
		//判断请求是否成功
		if(con.getResponseCode() == 200) {
			InputStream instream = con.getInputStream();
			//流的工具类,专门从流中读取数据(返回的是二进制数据)
			byte[] data = StreamTool.read(instream);
			//网页文本为字符串,故需进行类型转换,编码格式由网页编码决定
			String html = new String(data,"utf-8");
			return html;
		}
		return null;
	}
}
创建一个StreamTool类,里面包含read()方法(可单独建包,以便日后使用)
package com.example.htmlview;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class StreamTool {
	//读取流中的数据	
	public static byte[] read(InputStream instream) throws Exception {
		ByteArrayOutputStream outstream = new ByteArrayOutputStream();
		//定义一个字节数组
		byte[] buffer = new byte[1024];
		int len = 0;
		while((len = instream.read(buffer)) != -1) {
			outstream.write(buffer, 0, len);
		}
		instream.close();
		return outstream.toByteArray();		
	}
}
***不要忘了网络访问权限***

AndroidManifest.xml

<!-- 网络访问权限 -->
    <uses-permission android:name="android.permission.INTERNET"/>

(布局代码省略)

常见的网络连接问题

拼写错误:

<uses-permission android:name="android.permission.BLUETOOTH" />而不是<user-permission android:name="android.permission.BLUETOOTH" />而且就算这样写错了,也能编译通过,只不过安装的时候不会显示该APP需要的权限,当然该APP什么权限都没有申请到。

手机是否联网:

(但是直接在PC的浏览器输入地址是没有问题的):10-15 17:03:36.043: E/XXXApp(5660): Connection I/O Exception :java.net.UnknownHostException: Unable to resolve host "www.baidu.com": No address associated with hostname

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值