新建一个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