import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.style.URLSpan;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.HttpAuthHandler;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private final int REQUESTSUCESS = 0;
private final int REQUESTNOTFOUND = 1;
private final int REQUESTEXCEPTION = 2;
EditText et_path;
TextView tv_reuslt;
//在主线程中定义一个handler
private Handler handler = new Handler(){
//重写方法
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case REQUESTSUCESS:
System.out.println("-*------56565+++-----999--88+65--");
//取数据
String conten = (String) msg.obj;
tv_reuslt.setText(conten);
tv_reuslt.setText(conten);
System.out.println(conten);
break;
case REQUESTNOTFOUND:
Toast.makeText(getApplicationContext(), "请求不存在", 0).show();
break;
case REQUESTEXCEPTION:
Toast.makeText(getApplicationContext(), "服务器忙请稍后...", 0).show();
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_path = (EditText)findViewById(R.id.et_path);
tv_reuslt = (TextView)findViewById(R.id.tv_result);
//打印线程名子
System.out.println("线程名字"+Thread.currentThread().getName());
}
//点击事件
public void click(View v){
//创建 一个子线程
new Thread(){public void run(){
try {
//2.1 获取源码
String path = et_path.getText().toString().trim();
//2 创建 url对像
URL url=new URL(path);
//2.3 拿到httpurlconnection对像 用发送或乾接收数据
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//2.4 设置发送get请求
conn.setRequestMethod("GET"); //get 要求大写, 默认就是get请求
//2.5 设置请求超时时间
conn.setConnectTimeout(50);
//2.6 获取服务返回的状态码
int code = conn.getResponseCode();
//2.7 如果code == 200请求成功
if(code == 200){
//2.8 获取返回的数据 是以流的形式返回的
//把流转换成字符串是一个非常见的操作 所以我由出一个工具类utis
InputStream in = conn.getInputStream();
//调用定义的具类把in转换成String
String content = StreamTools.readStream(in);
//2.9.0创建message对像
Message msg = new Message();
msg.what = REQUESTSUCESS;
msg.obj = content;
//2.9.1 拿着我们创建 的handler(助手) 告诉系统说我要更新ui
//发了一条消息 消息(msg)把数据放到msg里
//handleMessage(android.os.Message msg) 就执行了
handler.dispatchMessage(msg);
//2.9 把流的里面数据展示textView上 更新UI逻辑
//tv_reuslt.setText(content);
}else{
//请求资源不存在 toast是一个view 也不能在线程更新ui
Message msg = new Message();
//代表那条消息
msg.what = REQUESTNOTFOUND;
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//请求资源不存在 toast是一个view 也不能在线程更新ui
Message msg = new Message();
//代表那条消息
msg.what = REQUESTEXCEPTION;
handler.sendMessage(msg); //发消息
}
System.out.println("55555555");
};}.start();
}
}
//获取网页数据转换String
package com.example.dfefewweeee;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class StreamTools {
//把一个inpuStream 转换成一个string
public static String readStream(InputStream in) throws Exception{
int len = -1;
//内存输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
while((len = in.read(buffer))!= -1){
baos.write(buffer,0,len);
}
String content = new String(baos.toByteArray());
in.close();
return content;
}
}