关闭

Android 网络编程 初级入门(一)

339人阅读 评论(0) 收藏 举报
分类:

网络图片的下载

前几天刚把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中添加网络权限。

<uses-permission android:name="android.permission.INTERNET"/>


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

这里写图片描述

3.关于刷新UI的问题:

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

要想在子线程中刷新UI,需要使用消息队列机制。
这里写图片描述

关于子线程刷新ui的问题,有多种方法,可参考其他博主的文章,如
http://blog.csdn.net/olanmomo/article/details/40040569

程序源码下载:http://download.csdn.net/detail/shangguanyunlan/9278161

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:75749次
    • 积分:1049
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:25篇
    • 译文:0篇
    • 评论:5条
    最新评论