文档章节

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

吴新超
 吴新超
发布于 2015/02/13 16:15
字数 1702
阅读 175
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

Ugly Number(leetcode263)

Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. Example 1: Input: 6Output: true......

woshixin
16分钟前
0
0
深度模型从研者 眼里的 似然估计 & Hessain 海森矩阵 & Fisher Information (费雪信息)

深度模型的训练的基本依据是最小化模型拟合数据的误差。旨在不仅知其然(如何构建和训练一个深度模型),还应知其所以然(为什么这样训练,可以做哪些优化)。我们就会发现,有很多研究者,在...

刘小米_思聪
20分钟前
0
0
阿里巴巴智能监控新场景的探索

摘要: 智能监控是智能运维的子领域,详细分析。 作者简介 王肇刚 阿里巴巴全球运行指挥中心高级技术专家 智能监控是智能运维的子领域,我们说的监控,探讨的更多是在监控策略,因为可能从数...

阿里云官方博客
22分钟前
1
0
【双十二】12 月 12 日 12 点 12 分限量抢福利,云计算不剁手!

活动详情 1.首充豪礼 双十二当日,新用户首充 200 元送 200 元代金券!仅限前 88 名!先到先得!拼手速!(新用户指 12 月 12 日前已完成注册但从未充值过的用户)
 2.超值返券 双十二当日,...

七牛云
48分钟前
3
0
Calculate Linux 发布 18 LXQt是基于Gentoo的发行版

导读 Calculate Linux 是一个基于 Gentoo 并与 Gentoo 完全兼容的滚动更新发行版家族,专为企业环境下的快速部署而优化。其提供多个不同的分支版本,分别适用于桌面、服务器等应用场景。该项...

问题终结者
50分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部