Android基础之二——网络编程(一)

本文介绍了Android网络编程的基础知识,包括使用GET、POST方法发送请求,创建网络图片查看器,理解子线程与UI线程交互的限制,以及消息处理机制。重点讲解了smartImageView的使用和网络数据的提交,提供了相关代码示例。
摘要由CSDN通过智能技术生成

01_网络图片查看器(重点)

向服务器端发送请求的常用方式:GET、POST

  • 步骤:

    1、创建一个URL,打开一个HTTP的连接;

    2、设置请求头信息;

    3、获取服务器端返回的响应数据,判断响应码,200ok,404找不到资源、503服务器内部错误,然后获取输入流;

    4、把二进制流数据转换成一个图片,并显示在Imageview;

    模版代码:

    //          1、创建一个URL,打开一个HTTP的连接;
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    //          2、设置请求头信息;
                conn.setRequestMethod("GET");//默认是GET方式,大写
                conn.setConnectTimeout(3000);
    //              conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
    
    //          3、获取服务器端返回的响应数据,判断响应码,200ok,404找不到资源、503服务器内部错误,然后获取输入流;
                int code = conn.getResponseCode();
                if(code == 200){
                    //获取返回的二进制数据流
                    InputStream is = conn.getInputStream();
    //                  4、把二进制流数据转换成一个图片,并显示在Imageview;
                    Bitmap bm = BitmapFactory.decodeStream(is);
                    iv.setImageBitmap(bm);
    
                }else{
                    //提示用户信息
                    Toast.makeText(this, "服务器端返回数据失败", 0).show();
    
                }
    
  • android.os.NetworkOnMainThreadException:网络在主线程上的异常

  • android4.0之后,google为了让UI界面运行的更加流畅,强制要求访问网络的操作不能再主线程中进行。这样就避免了在主线程因为访问网络时间太长,导致界面卡死等现象的发生。

  • 运行activity的线程就是主线程(UI线程),oncreate、单击事件的响应方法都是运行在主线程里面的。

02_子线程不能修改UI界面

Only the original thread that created a view hierarchy can touch its views:
只有创建UI界面的线程才能修改UI界面,谁创建的界面谁才能修改。

子线程不能直接修改UI界面,只有主线程(UI线程)才能修改UI界面。
子线程可以修改UI界面,修改UI界面之后,系统会自动判断当前线程是不是主线程,如果不是主线程,就会立即终止程序的运行。

03_消息处理机制的原理(重点)

  • 步骤:

    1、创建handler对象
    
    private Handler handler = new Handler(){
        //接收消息、处理消息
        public void handleMessage(Message msg) {
    
        };
    };
    
    2、得到handler的引用,向主线程发送一个消息
    
            // iv.setImageBitmap(bm);
            //把消息放入消息盒子中
            Message msg = new Message();
            msg.obj = bm;
            //向主线程发送一个消息
            handler.sendMessage(msg);
    
    
    
    3、handler修改UI界面
    
    private Handler handler = new Handler(){
        //接收消息、处理消息
        public void handleMessage(Message msg) {
            Bitmap bm = (Bitmap) msg.obj;
    
            iv.setImageBitmap(bm);
        };
    };
    
  • handler的工作机制原理( Handler、message、Looper三者之间的关系):

    前提知识:
    所有使用UI界面的操作系统,后台都在运行着一个死循环,它在不停地监听和接收用户发出的指令,一旦接收到指令,就马上执行。
    
    我们的应用程序一旦运行起来,系统就会给它提供一个轮询器Looper,Looper内部维护了一个消息队列(MessageQueue)。当子线程调用handler的sendMessage方法发送消息(Message)的,会把消息放到消息队列里。Looper不停的从消息队列中去消息,取到消息后会马上发送给handler,handler来修改UI界面。
    

04_网络HTML查看器

代码:

package com.itheima.htmlview;


import java.io.InputStream;
import jav
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值