学习笔记:异步http开源框架android-async-http的使用

 接着昨天的笔记,昨天的笔记我们讲到了两种面向HTTP协议发送GET/POST请求的方式,并对比了两种方式的源码还有GET/POST参数的不同,我们说到,这两种方式都是需要三步来完成:1,开启一个子线程;2,编写http请求逻辑传递/获取数据;3,让UI线程更新界面.
托管在GITHUB上的开源框架就直接实现了这三个步骤的包装,我们需要做的只是传递几个参数和获取数据后进行处理即可:我们先通过GET请求的源码实现,然后再略微讲解下这个框架底层的实现方式:
 
学习笔记:异步http开源框架android-async-http的使用_第1张图片

以上是loginByAsyncGet()方法是布局中的一个按钮的点击事件,我们可以看到在这个点击事件的逻辑代码中,我们并没有开启一个新的线程处理网络操作,也没有sendMessage去告知消息处理器处理UI更新,我们所做的只有:
1,初始化一个AsyncHttpClient
2,调用它的get()方法,并且重新它的onSuccess()处理返回数据即可.
仅仅两步操作即完成了我们上一篇笔记中的http请求.
从上面的get()方法传递的参数一个path路径,一个自定义的Hadler我们可以 模拟出它底层的简单实现:
首先我们也创建了一个AsyncHttpClient类,里面写了一个get方法:
get方法中做了以下操作:
传递一个请求路径和一个我们自定义的Handler,在Get方法中开一个新的线程,并将路径访问网络操作成功或者失败分别返回不同的结果告诉我们自己写的MyHandler处理:重写
Handler的handleMessage()方法,判断msg.what是成功还是失败,成功:调用onSuccess()方法,失败:调用onFailure()方法.
以下是GET方法:
学习笔记:异步http开源框架android-async-http的使用_第2张图片
 以下是我们自定义的MyHandler:
学习笔记:异步http开源框架android-async-http的使用_第3张图片 

 所以我们使用我们自己写的
AsyncHttpClient类访问网络时也只需要这样操作即可:
 学习笔记:异步http开源框架android-async-http的使用_第4张图片

模拟
android-async-http简单的 GET请求的实现原理就是这样的.接下来我们同样看android-async-http实现异步POST请求的方式
实现代码:
学习笔记:异步http开源框架android-async-http的使用_第5张图片
在POST请求中我们同样先初始化一个AsyncHttpClient,然后调用他的post()方法即可
我们在参数中看到一个RequestParams类型的参数,它是像HashMap一样以键值对方式将post的请求参数放进去,然后传给服务器进行接收,RequestParams中除了可以放一般类型的参数外,还可以放置File文件类型进行文件的上传,一会儿我们再讲如何通过这个框架实现手机文件上传到服务器,onSuccess中和GET请求一样返回的是三个参数,这三个参数:
第一个statusCode是(200,503,404)等的请求响应码,
第二个headers中存放的是response的消息头,包括了他的编码方式等内容
第三个参数responseBody就是response中的内容了,我们在服务器中doPost()请求中模拟了成功后得到的数据

PrintWriter out=response.getWriter();

out.write("login success");

responseBody的内容即是"login success"
好了通过
android-async-http框架进行一般的http服务器请求就是这么简单,我们再来看如何使用这个开源框架进行文件的上传,如果要自己写一个文件上传单单通过apache 的httpClient也可以实现,但是代码量特别大,而且非常容易出错,这个框架就已经包装了这些繁琐的操作,我们只需要关心它的实现方式就OK!
我们为了方便,再写一个servlet作为文件上传的服务器,将手机上传的文件放到电脑E盘的文件夹中去
先做一个网页上传的测试并截取一些参数来看看上传文件需要配置哪些参数:
服务端代码,通过org.apache.commons.fileupload实现上传:
学习笔记:异步http开源框架android-async-http的使用_第6张图片 
上传浏览器端截取的参数:
 学习笔记:异步http开源框架android-async-http的使用_第7张图片
我们可以看到他的connent-type和它的上传文件参数是需要以一定格式进行编写的, 
android-async-http底层代码中就对这些--和/t /n做了包装,我们只要直接调用即可实现上传:代码

学习笔记:异步http开源框架android-async-http的使用_第8张图片
学习笔记:异步http开源框架android-async-http的使用_第9张图片
我们看到上面的方式和我们 之前的POST方式一模一样,只是在RequestParams中放置的参数类型变成了File,我们试着将手机中的一个文件上传到电脑,
我这里就将以前做手机备份APP时备份的手机短信上传到服务器并在控制台打印参数中的headers:

学习笔记:异步http开源框架android-async-http的使用_第10张图片

学习笔记:异步http开源框架android-async-http的使用_第11张图片

文件上传成功:
学习笔记:异步http开源框架android-async-http的使用_第12张图片


 好了,对于android-async-http这个开源框架的入门操作就讲这些,其它更高级的应用大家可以去GITHUB下载这个框架的源码其中他给了这个框架的API手册,可以通过API实现你想要的操作.
这里讲一个小插曲,细心的人应该可以看到,为什么我这个应用可以上传我手机另外一个应用下的短信文件?因为这个小细节,在调试的时候把我绕了好久,我的模拟器当时不知道因为什么,SD卡无法配置上去,(现在已经解决 ),所以我想到之前做手机备份软件时将备份的短信存在了那个应用目录下,所以我就想直接去上传那个文件夹下的XML短信文件,结果传了半天一直报错,起初一直是以为servlet服务端没写好,后来怎么查代码都感觉没问题,结果叮一下就想到应用之间是不能直接访问文件的,必须要通过对方内容提供者去让对方处理这些事情,所以为了方便,我就直接去改了那个应用包下这个文件的权限.....所以才能访问,大家千万别犯这种2B错误...应用之间是不能直接访问对方数据的:附上犯罪记录:
 学习笔记:异步http开源框架android-async-http的使用_第13张图片

好了今天的日志就这些,接下来就要开始讲ACTIVITY了,非常重要的Android基础!这个讲完基本上就可以讲点开源框架,然后再学点控件使用,就可以风风火火的进行开发了,像相机的调用啊,应用程序的国际化,图形,多媒体播放器等等,都可以直接看示例代码了去使用.



你可能感兴趣的:(学习笔记:异步http开源框架android-async-http的使用)