关闭

android 获取网页代码显示TextView中

标签: android
103人阅读 评论(0) 收藏 举报
package com.example.dfefewweeee;


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;

}


}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:633次
    • 积分:75
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档