您的位置:首页 > 理论基础 > 计算机网络

handler的使用详解+http联网

2017-08-16 11:00 302 查看
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.发送延时消息

后续更新....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  handlet http