您的位置:首页 > 移动开发 > Android开发

android 获取网页代码显示TextView中

2017-09-26 19:32 316 查看
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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐