博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 网络编程 初级入门(一)
阅读量:4050 次
发布时间:2019-05-25

本文共 2702 字,大约阅读时间需要 9 分钟。

网络图片的下载

前几天刚把Tomcat服务器搭建好,就开始学习Android 网络编程,在参考了部分资料后,终于实现了网络图片的查看。下面就把整个过程记录一下,方便自己复习,也给需要者提供参考。

点击“下载图片”按钮,实现图片的下载,先看一下效果图:

这里写图片描述

布局文件很简单,Button和ImageView,就不介绍了。

  1. 点击按钮的程序如下:
public void click(View v){        //开启子线程        Thread thread = new Thread(){            @Override            public void run() {                // TODO Auto-generated method stub                super.run();                //前提是搭建Tomcat 确定网址 下载图片                String path ="http://192.168.56.1:8080/sea.jpg";                try {                    //把网址封装成url对象                    URL url = new URL(path);                    //获取连接对象,不过此时还没有建立连接                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    //初始化                    conn.setRequestMethod("GET");                    conn.setReadTimeout(10000);                    conn.setReadTimeout(10000);                    //发送请求,建立连接                    conn.connect();                    //响应码为200,说明请求成功                    if (conn.getResponseCode() == 200) {                        //得到返回的数据流                        InputStream is = conn.getInputStream();                        //读取数据流,构造位图                        Bitmap bm = BitmapFactory.decodeStream(is);                        //构造消息,传递给子线程                        Message msg = new Message();                        msg.obj = bm;                        //设置请求成功  标志                        msg.what = 1;                        //发送消息 到主线程 的消息队列中                        handler.sendMessage(msg);                    }else{                        Message msg = handler.obtainMessage();                        msg.what = 0;                        handler.sendMessage(msg);                    }                                   } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }               }        };        //开启线程        thread.start();         }

2.子线程要想刷新Ui,需要利用主线程中的Handler处理子线程发过来的消息。

static Handler handler = new Handler(){        //主线程调用,根据子线程的请求,刷新UI        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            // 请求成功或失败 做出处理            switch (msg.what) {            case 1:                //显示位图 图像                iv.setImageBitmap((Bitmap)msg.obj);                break;            case 0:                Toast.makeText(ma, "请求失败", 0).show();                break;            }        }       };

需要注意的地方:

1.在AndroidManifest.xml中添加网络权限。

2. startup 服务器,即开启Tomcat,测试服务器的正常使用。

这里写图片描述

3.关于刷新UI的问题:

刷新UI只能在主线程中完成,如果程序写在子线程,是没用的。

要想在子线程中刷新UI,需要使用消息队列机制。

这里写图片描述

关于子线程刷新ui的问题,有多种方法,可参考其他博主的文章,如

程序源码下载:

你可能感兴趣的文章
Oracle 异机恢复
查看>>
Oracle 12C DG 搭建(RAC-RAC/RAC-单机)
查看>>
Truncate 表之恢复
查看>>
Oracle DG failover 后恢复
查看>>
mysql 主从同步配置
查看>>
为什么很多程序员都选择跳槽?
查看>>
mongdb介绍
查看>>
mongdb在java中的应用
查看>>
区块链技术让Yotta企业云盘为行政事业服务助力
查看>>
Yotta企业云盘更好的为媒体广告业服务
查看>>
Yotta企业云盘助力科技行业创高峰
查看>>
Yotta企业云盘更好地为教育行业服务
查看>>
Yotta企业云盘怎么帮助到能源化工行业
查看>>
企业云盘如何助力商业新发展
查看>>
医疗行业运用企业云盘可以带来什么样的提升
查看>>
教育数字智能化能为现有体系带来新的起点
查看>>
媒体广告业如何将内容资产进行高效地综合管理与利用
查看>>
能源化工要怎么管控核心数据
查看>>
媒体广告业如何运用云盘提升效率
查看>>
企业如何运用企业云盘进行数字化转型-实现新发展
查看>>