handler的使用详解+http联网
来源:互联网 发布:新西兰留学知乎 编辑:程序博客网 时间:2024/06/01 08:59
1.更新UI
StreamUtils工具来:
package zz.itcast.html;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
public class StreamUtils {
// 工具类。帮我们将流转换成字符串
public static String getStringFromStream(InputStream is){
String content = null;
// 直接将流的内容写到内存中
// 创建一个字节数组输入流 他是将字符串写在内存中,并不是一个文件上
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = -1;
byte[] buf = new byte[1024];
while((len = is.read(buf))!=-1){
baos.write(buf, 0, len);
}
// 字符串此时已经在内存中 这里是因为baos这个对象已经将toString方法进行了复写
content = baos.toString();
// 关流 关了也行 不关也可以 原因是因为写在内存中
baos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return content;
}
}
MainActivirt :
package zz.itcast.html;
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.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private EditText et_url;
private TextView tv_src;
// 这种写法相当于给匿名内部类这个对象 再添加一个引用
private MyHandler handler = new MyHandler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_url = (EditText) findViewById(R.id.et_url);
tv_src = (TextView) findViewById(R.id.tv_src);
}
public void look(View view) {
// 1。现获取url
final String path = et_url.getText().toString().trim();
new Thread() {
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
// 告诉服务器联网的post get
// 设置联网方式 这里用大写
conn.setRequestMethod("GET");
// 设置联网超时时长 如果超过这个时间没有连上服务器 就认为连不上了
conn.setConnectTimeout(5000);
// 拿到状态响应码 只要拿响应码 就已经开始联网
int code = conn.getResponseCode();
if (code == 200) {
// 状态码为200代表联网成功
// 拿到服务器返回的数据,输入流
InputStream is = conn.getInputStream();
// 将抽象的流转换成我们能看懂的字符串,并且显示在TextView上
String content = StreamUtils.getStringFromStream(is);
// // 显示出来
// tv_src.setText(content);
// javabean对象可以携带数据
Message msg = new Message();
// 赛点数据给msg
msg.obj = content;
// 调用这个方法把消息发送到主线程
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
//调用这个方法得到子线程发送的数据更新UI
private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// 这个方法一定是在主线程调用
System.out
.println("handler的线程:" + Thread.currentThread().getName());
String content = (String) msg.obj;
// 在这可以更新UI
tv_src.setText(content);
}
}
}
2.发送延时消息
后续更新....
- handler的使用详解+http联网
- 详解Android Handler的使用
- 详解Android Handler的使用-别说你不懂handler
- golang http.handler接口详解
- Android中有关Handler的使用详解
- 详解android Handler使用
- Android Handler使用详解
- Android Handler使用详解
- Handler使用详解
- Http Handler由IIS6到IIS7的使用问题
- netty之http部分handler的使用与超时控制handler
- netty之http部分handler的使用与超时控制handler
- Handler---Handler异步方式详解及其使用
- Unity中使用HTTP弱联网
- Android的handler详解
- Android的handler详解
- Android 中Handler机制的详解与使用
- j2me http联网客户端的编写之一
- Instant Run performed a full build and install since the installation on the device does not match t
- 野指针和空指针
- 采购员的烦恼(buying)--解法
- POJ 3660 Cow Contest floyd求传递闭包 || bfs
- Android 卡在Gradle:Resolve dependencies':app:_debugCompile'
- handler的使用详解+http联网
- 网站开发(七)数据库的建表与连接
- 【poj 2406】 Power Strings 【KMP 求最小循环节】
- vue+element-ui打包时候出现 UglifyJs Unexpected token: punc 问题
- redux-组合函数(compose)理解
- Spring框架入手学习(二)
- 为什么Java中1000==1000为false而100==100为true?
- Android的Input流程分析(好文)
- POJ