当前位置:首页 » 《随便一记》 » 正文

Android中创建子线程进行网络访问_Blue_Tong的博客

27 人参与  2022年04月19日 17:23  分类 : 《随便一记》  评论

点击全文阅读


 //主线程中接收子线程发送的消息并处理
private Handler handler=new Handler(){
        @SuppressLint("HandlerLeak")
        public void handleMessage(Message msg){
            try {
                switch (msg.what){
                    case 0:
                        String Listeningresponse= msg.getData().getString("Listeningdate");
                    case 1:
                        String response = msg.getData().getString("date");
                    case 2:
                        vsnfilename=msg.getData().getString("vsndate");
                    default:
                        Log.e(TAG, " handler fail in send" );
                }

            }catch (Exception e){
                e.printStackTrace();
            }
        }
    };

上面代码是在主线程中接收子线程发送的消息,根据消息标识处理后续操作。下面是子线程代码:

开启子线程服务:new Thread(runnable).start();

子线程执行的任务:

 Runnable runnabletday = new Runnable(){
        @Override
        public void run() {
            try {
                //String url=ResourceMethod.UrlSplicingMinute();
                String url2=ResourceMethod.UrlSplicingDay();
                hadata=getDateFromSever(url2);
                Message msg = new Message();
                Bundle bundle =new Bundle();
                bundle.putString("date", hadata);// 这是数据标志,在接收的时候方便辨认
                msg.setData(bundle);
                msg.what = 1;
                handler.sendMessage(msg);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };

代码    Bundle bundle =new Bundle();      bundle.putString("date", hadata)中data是数据标识,hadata是需要发送的数据。可以是int,string,object等。msg.what = 1是设置的消息标识位,在接收消息的时候作为区分消息。

hadata=getDateFromSever(url2)是访问url2获取数据的方法:具体实现如下:

//进行http请求并获取返回的数据
    public String getDateFromSever(String url) {
        try {
            OkHttpClient client = new OkHttpClientFactory().getInstance();
            Request request = new Request.Builder()
                    .url(url)
                    .get()
                    .build();
            Response response = client.newCall(request).execute();
            Log.d(TAG, "Ipaws response="+response);
            String responseData = response.body().string();
            if (response.isSuccessful()) {
                return responseData;
            }else {
                Log.d(TAG, "responseData: error");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


点击全文阅读


本文链接:http://zhangshiyu.com/post/38471.html

线程  消息  数据  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1