文档章节

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

吴新超
 吴新超
发布于 2015/02/13 16:15
字数 1702
阅读 169
收藏 1

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

以上是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方法:
图片
 以下是我们自定义的MyHandler:
图片 

 所以我们使用我们自己写的
AsyncHttpClient类访问网络时也只需要这样操作即可:
 图片

模拟
android-async-http简单的 GET请求的实现原理就是这样的.接下来我们同样看android-async-http实现异步POST请求的方式
实现代码:
图片
在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实现上传:
图片 
上传浏览器端截取的参数:
 图片
我们可以看到他的connent-type和它的上传文件参数是需要以一定格式进行编写的, 
android-async-http底层代码中就对这些--和/t /n做了包装,我们只要直接调用即可实现上传:代码

图片
图片
我们看到上面的方式和我们 之前的POST方式一模一样,只是在RequestParams中放置的参数类型变成了File,我们试着将手机中的一个文件上传到电脑,
我这里就将以前做手机备份APP时备份的手机短信上传到服务器并在控制台打印参数中的headers:

图片

图片

文件上传成功:
图片


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

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



© 著作权归作者所有

共有 人打赏支持
吴新超
粉丝 2
博文 8
码字总数 13585
作品 0
海盐
程序员
async-http-client开源库学习笔记(一)

文前闲话 作为一个Android开发的大龄初学者,面对扑面而来的各种姿势的Android的开源组件,让人倍感窒息,难以应对。无奈为了养家糊口,虽然已近不惑,人老珠黄,也只能废寝忘食,逐个体位细...

马丁当
2015/08/19
0
3
android-async-http源码剖析

本文主要内容 android-async-http用法 android-async-http主要流程 总结 1、android-async-http用法 android-async-http框架用于网络请求等,据说它已经不再维护,但个人感觉它还是很好用的,...

某昆
08/25
0
0
六款值得推荐的android(安卓)开源框架简介【转】

1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载; (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求...

hkstar35
2014/07/11
0
0
六款值得推荐的android(安卓)开源框架简介【转】

1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载; (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求...

火蚁
2014/07/09
0
1
Android 网络开发框架的选择

当我们开发企业级应用的时候,一般都会选择使用已经封装好的http框架。开源的比较流行的有: 1、volley 2、android-async-http 3、retrofit 4、okhttp 5、androidquery 6、AndroidAsync 等。...

jdroid
2014/04/20
0
2

没有更多内容

加载失败,请刷新页面

加载更多

分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
13分钟前
1
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
21分钟前
0
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
31分钟前
15
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
57分钟前
1
0
区块链技术中的那些能商用的企业级应用

WEPOWER是一家立陶宛初创企业,旨在改变可再生电力项目的付费方式。WePower公司创始人Nick Martyniuk表示,政府统一收购价的存在推动了全球风能与太阳能市场的发展。因此,他的公司希望帮助那...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部