• 1. 第九章 网络编程Handler消息机制 HttpClient访问网络 HttpURLConnection访问网络 多线程下载原理
  • 2. ✎ 学习目标3 HTTP协议 开源项目的使用重点了解掌握2 AsyncTask HttpURLConnection HttpClient Handler消息机制 多线程下载原理1
  • 3.  目录让IT教学更简单,让IT学习更有效网络编程入门9.1☞点击查看本小节知识架构使用HttpURLConnection访问网络 9.2☞点击查看本小节知识架构使用HttpClient访问网络9.3☞点击查看本小节知识架构数据提交方式9.4☞点击查看本小节知识架构
  • 4.  目录让IT教学更简单,让IT学习更有效开源项目9.5☞点击查看本小节知识架构多线程下载 9.6☞点击查看本小节知识架构本章小节9.7
  • 5.  知识架构9.1 网络编程入门返回目录9.1.1HTTP协议简介9.1.3AsyncTask9.1.2Handler消息机制原理
  • 6.  知识架构9.2 使用HttpURLConnection访问网络返回目录9.2.1HttpURLConnection的基本用法案例——网络图片浏览器 9.2.2
  • 7.  知识架构9.3 使用HttpClient访问网络返回目录9.3.1HttpClient的基本用法案例——网络图片浏览器(使用HttpClient)9.3.2
  • 8.  知识架构9.4 数据提交方式返回目录9.4.1GET方式和POST方式提交数据 9.4.2案例——提交数据到服务器
  • 9.  知识架构9.5 开源项目返回目录9.5.1AsyncHttpClient的使用 9.5.3案例——新闻客户端 SmartImageView的使用9.5.2
  • 10.  知识架构9.6 多线程下载返回目录9.6.1多线程下载原理 案例——文件下载9.6.2
  • 11. 让IT教学更简单,让IT学习更有效9.1 网络编程入门什么是HTTP协议?9.1.1 HTTP协议简介
  • 12. 9.1 网络编程入门9.1.1 HTTP协议简介日常生活中,大多数人遇到了问题都会使用手机进行百度搜索。在浏览器的地址栏中输入百度的网址点击搜索,此时就会进入百度主页。这个访问百度的过程就是通过HTTP协议完成的。从图中可以看出,使用手机客户端访问百度时,会发送一个HTTP请求。当服务器端接收到这个请求后,会做出响应并将百度页面返回给客户端浏览器。这个请求和响应的过程实际上就是HTTP通信的过程。
  • 13. 9.1 网络编程入门9.1.1 HTTP协议简介HTTP(Hyper Text Transfer Protocol)协议即超文本传输协议,它规定了浏览器和万维网服务器之间互相通信的规则。
  • 14. 9.1 网络编程入门9.1.2 Handler消息机制在使用手机下载软件时,通常都能在界面上看到一个下载的进度条,这个进度条用来表示当前下载的进度。但是Android4.0以后不能在UI线程访问网络,而子线程也不能更新UI界面。为了根据下载进度实时更新UI界面,就需要用到Handler消息机制来实现线程间的通信。 Handler机制主要包括四个关键对象,分别是:Message、Handler、MessageQueue、Looper。
  • 15. 9.1 网络编程入门9.1.2 Handler消息机制Message Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。 Handler Handler主要用于发送消息和处理消息。一般使用Handelr对象的sendMessage()方法发送消息,消息经过一系列处理后,最终会传递到Handler的handlerMessage()方法中。
  • 16. 9.1 网络编程入门9.1.2 Handler消息机制MessageQueue MessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。 Looper Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会进入到一个无线循环中。然后一发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的HandlerMessage()方法中。
  • 17. 9.1.2 Handler消息机制为了让初学者更好的理解Handler消息机制,接下来我们通过一个图例来梳理一下整个Handler消息处理流程。Handler消息处理首先需要在UI线程创建一个Handler对象,然后在子线程中调用Hanlder的sendMessage()方法,接着这个消息会存放在UI线程的MessageQueue中,通过Looper对象取出MessageQueue中的消息,最后分发回Hanlder的handleMessage()方法中。9.1 网络编程入门
  • 18. 9.1 网络编程入门9.1.3 AsyncTask为了方便子线程中对UI进行操作,Android提供了一些好用的工具类,AsyncTask就是其中之一。借助AsyncTask,可以十分简单地从子线程切换到主线程,它的原理也是基于异步消息处理机制的。 AsyncTask是一个抽象类,它有三个泛型参数,分别如下所示: Params:执行异步任务时需要传入的参数,用于后台任务中使用; Progress:后台任务执行时,如果需要在界面上显示当前的进度,则使用该参数作为进度单位; Result:当任务执行完毕后,如果需要对结果进行返回时,则使用该参数作为返回值类型;
  • 19. 9.2 使用HttpURLConnection访问网络9.2.1 HttpURLConnection的基本用法在实际开发中,绝大多数的App都需要与服务器进行数据交互,此时就需要用到HttpURLConnection,它是一个标准的Java类。 URL url = new URL("http://www.itcast.cn"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); InputStream is = conn.getInputStream(); try{ //读取流信息,获得服务器返回的数据 }catch(Exception e){ } conn.disconnect(); 需要注意的是,在使用HttpURLConnection对象访问网络时,需要设置超时时间,如果不设置超时时间,在网络异常的情况下,会取不到数据而一直等待导致程序僵死不往下执行。
  • 20. 9.2使用HttpURLConnection访问网络9.2.2 案例——图片浏览器市面上的大多数Android应用如新浪微博、网易新闻等都是网络应用,都需要与服务器进行通信,接下来通过案例“网络图片浏览器”向大家演示手机端与服务器进行通信的过程。
  • 21. 9.3 使用HttpClient访问网络9.3.1 HttpClient的基本用法HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、功能丰富的、支持HTTP协议的客户端编程工具包。 使用HttpClient访问网络与HttpURLConnectiond的过程大致相同 1)创建HttpClient对象 2)指定访问网络的方式,创建一个HttpPost对象或者HttpGet对象 3)如果需要发送请求参数,可调用HttpGet、HttpPost的setParams()方法 4)调用HttpClient对象的execute()方法访问网络 5)调用HttpResponse.getEntity()方法获取HttpEntity对象
  • 22. 9.3 使用HttpClient访问网络9.3.2 案例——图片浏览器(使用HttpClient)为了让初学者更好的掌握HttpClient的用法,接下来将改写9.2.2小节中的案例“网络图片浏览器”。
  • 23. 9.4 数据提交方式 9.4.1 GET方式和POST方式提交数据HTTP/1.1协议中共定义了八种方法来表明Request-URI指定的资源的不同操作方式。其中最常用的两种请求方式是GET和POST。 GET方式与POST方式的区别 GET方式以实体的方式得到由请求URL所指向的资源信息,向服务器提交的参数跟在请求URL后面。使用GET方式访问网络URL的长度是有限制的,请求URL的长度要小于1K。 POST方式用来向目的服务器发出请求,要求它接收被附在请求后的实体。它向服务器提交的参数在请求后的实体中,POST方式对URL的长度是没有限制的。
  • 24. 让IT教学更简单,让IT学习更有效9.4 数据提交方式 9.4.2 案例——提交数据到服务器为了让初学者掌握GET方式和POST方式提交数据,接下来通过案例“提交数据到服务器”来演示手机端是如何提交数据到服务器的。
  • 25. 让IT教学更简单,让IT学习更有效9.5 开源项目9.5.1 AsyncHttpClient的使用在Android开发中,发送、处理HTTP请求十分常见,如果每次与服务器进行数据交互都需要去开启一个子线程,这样是非常麻烦的。为了解决这个问题,一些开发者开发出了开源项目——AsyncHttpClient。 AsyncHttpClient是对HttpClient的再次包装。AsyncHttpClient的特点有,发送异步HTTP请求、HTTP请求发生在UI线程之外、内部采用了线程池来处理并发请求,而且它使用起来比HttpClient更加简便。
  • 26. 让IT教学更简单,让IT学习更有效9.5 开源项目9.5.2 SmartImageView的使用市面上一些常见软件,例如手机QQ、天猫、京东商场等,都加载了大量网络上的图片。用Android自带的API实现这一功能十分麻烦而且耗时。为此,编程爱好者开发了一个开源项目——SmartImageView。 开源项目SmartImageView的出现主要是为了加速从网络上加载图片,它继承自ImageView类,支持根据URL地址加载图片、支持异步加载图片、支持图片缓存等。
  • 27. 让IT教学更简单,让IT学习更有效9.5 开源项目9.5.3 案例——新闻客户端前面介绍了开源项目AsyncHttpClient和SmartImageView,下面通过一个案例“新闻客户端”向大家演示AsyncHttpClient和SmartImageView的综合使用。
  • 28. 让IT教学更简单,让IT学习更有效9.6 多线程下载文件9.6.1 多线程下载原理使用多线程下载资源,先要获取到服务器资源文件的大小,然后在本地创建一个大小与服务器资源一样大的文件,接着在客户端开启若干个线程去下载服务器的资源。 需要注意的是,每个线程必须要下载对应的模块,然后将每个线程下载的模块按顺序组装成资源文件。
  • 29. 让IT教学更简单,让IT学习更有效9.6 多线程下载文件9.6.2 案例——文件下载前面介绍了多线程下载的原理,下面通过一个“文件下载”的案例,来讲解Android应用如何使用多线程下载文件,并将每个线程下载的长度显示到界面上。
  • 30. 9.7 本章小结本章详细地讲解了Android系统网络编程。首先讲解了HTTP协议,然后讲解了Android两种访问网络、提交数据的方式。接着讲解了比较热门的两个开源项目,最后讲解了多线程下载文件。实际开发中大多数应用都需要联网操作,熟练掌握本章内容,能更有效率的进行客户端与服务端的通信。