付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】AsyncHttpClient实战总结及思考
第一次参加工作时使用的网络框架是AsyncHttpClient,虽说该框架使用非常简洁,但是使用的过程同时也是初学者成长与思考的过程。在项目的不同阶段,重新查阅网络请求的代码,总能想到一些优化的方法,或大或小。
github:/loopj/android-async-http官网:/android-async-http/
使用步骤:1、创建一个AsyncHttpClient对象2、创建RequestParams对象并设置请求参数(可选)3、调用AsyncHttpClient的get或post方法,并传入AsyncHttpResponseHandler接口的实现对象,用于处理请求返回。一般匿名内部类即可。
使用方法:compile'com.loopj.android:android-async-http:1.4.9'自2015年更新1.4.9版本,支持android6.0移除HttpClient带来的问题后便没有后续更新,现在更火的是OkHttp。
关键类AsyncHttpResponseHandler:其余三个的基类,返回子节数组,实现ResponseHandlerInterfaceTextHttpResponseHandler:返回字符串JsonHttpResponseHandler:返回JSONObject或JSONArray或StringBaseJsonHttpResponseHandler:返回传入的实体类对象
创建一个AsyncHttpClient对象AsyncHttpClientasyncHttpClient=newAsyncHttpClient();
AsyncHttpResponseHandlerasyncHttpClient.post(url,
new
AsyncHttpResponseHandler()
{
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
byte[]
responseBody)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
byte[]
responseBody,
Throwable
error)
{
}
});
通常重写onSuccess和onFailure分别对应成功、失败的处理代码。也可以重写onStart和onFinish处理启动和结束的逻辑,一般我用来显示和隐藏加载对话框
TextHttpResponseHandler一开始不知道有这么一个类,每次都手动将byte[]转String,这个比较常用。asyncHttpClient.get(url,
newTextHttpResponseHandler()
{
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
String
responseString)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
String
responseString,
Throwable
throwable)
{
}
});JsonHttpResponseHandler
用于直接返回Json对象,这个类相比其他几个稍微复杂,首先需要你自己选择重写的父类方法,其次提供了三种重载的方法供你重写。onSuccess/onFailure(...JSONArray)onSuccess/onFailure(...JSONObject)onSuccess/onFailure(...String)
查阅源码可知:JsonHRH会根据不同的解析结果调用不同的onSuccess/onFailure。所以使用这个类,你只需要知道服务器返回的数据格式,并重写合适的onSuccess/onFailure即可。asyncHttpClient.get(url,
new
JsonHttpResponseHandler(){
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
JSONArray
response)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
Throwable
throwable,
JSONArray
errorResponse)
{
}
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
JSONObject
response)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
Throwable
throwable,
JSONObject
errorResponse)
{
}
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
String
responseString)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
String
responseString,
Throwable
throwable)
{
}
@Override
public
void
onRetry(int
retryNo)
{
}
});
备注:这里返回的是JSONObject或JSONArray对象,对于需要转换成Java对象的需求来说,这里还需要自己做一个转换Java对象的操作。这里不太方便,不如直接使用BaseJSONHttpResponseHandler。
BaseJsonHttpResponseHandler<JSON_TYPE>
BaseJSONHttpResponseHandler是一个泛型类,类型参数是你要反序列化的JavaBean。也是用于直接返回Json对象,不同于JsonHRH的是你需要重写parseResponse方法,自己完成Json的反序列化。方便你使用Gson、JacksonJson等第三方框架。asyncHttpClient.get(url,
new
BaseJsonHttpResponseHandler<Update>()
{
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
String
rawJsonResponse,
Update
response)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
Throwable
throwable,
String
rawJsonData,
Update
errorResponse)
{
}
@Override
protected
Update
parseResponse(String
rawJsonData,
boolean
isFailure)
throws
Throwable
{
return
Update.parse(rawJsonData);//自己完成反序列化
}
});
这里的Update是一个实体类,自带一个parse方法能将String反序列化程Update对象。在parseResponse中返回解析完成的Java对象,然后在onSuccess中就可以获得对应的Java对象。个人认为比JsonHRH来得好用,这里将Json转换Java对象的逻辑放在parseResponse方法里,代码逻辑更清晰。
在实战中进步:在请求服务器,解析Json数据这条路上经历了这三个阶段:阶段一:只使用AsyncHttpResponseHandler每次都手动将byte[]转String,然后新增一个类JsonUtil用于将String转换成Java对象,代码非常的臃肿。阶段二:使用TextHttpResponseHandler省去了byte[]转String的过程。但是依然需要JsonUtil来转换Java对象阶段三:使用BaseJsonHttpResponseHandler。将转换过程放在每一个JavaBean类中。代码可以更简洁易懂。
同样对于json解析,以前的做法是:1、新增一个JavaBean2、在JsonUtil中新增一个getJavaBean()的方法用于反序列化(使用Gson)
由于Gson在使用过程中使用泛型遇到“类型擦除”的问题,找不到解决方法。对于每一个JavaBean都需要新增一个getJavaBean的方法来解析出对应的JavaBean,显得代码很臃
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 聚丙烯酰胺装置操作工岗中理论综合考核试卷含答案
- 玉米收获机操作工激励考核试卷含答案
- 灯具零部件制造工安全生产知识评优考核试卷含答案
- 高海拔宇宙线观测站LHAASO之KM2A电子学批量测试平台关键技术与应用研究
- 高气压环境下脉冲MIG焊脉冲波形对电弧的影响及其控制
- 高校跨学科学术组织激励的困境剖析与路径重构
- 高校数字化转型下大学生综合评测系统的设计与实现-以具体高校为例
- 高校心理危与机:大学生心理危机应对体系的构建与突破
- 高校后勤实体归属性与人力资源配置的协同发展研究
- 高校人力资源配置机制创新研究
- 2025年执业医师考试(临床执业医师)试题及答案
- 医学静脉疗法考试试卷集
- 道路勘测设计说课课件
- T-CAWABJ 002-2025 疗愈犬服务标准
- DB13-T2342-2016-商业物业管理服务规范-河北省
- 行业标准立项答辩
- DBJ45 024-2016 岩溶地区建筑地基基础技术规范
- 第十三届全国黄金行业职业技能竞赛(首饰设计师赛项)考试题库(含答案)
- 城市道路养护与管理北京城市道路养护管理中心
- GB/T 24820-2024实验室家具通用技术条件
- 精神病学智慧树知到期末考试答案章节答案2024年齐鲁医药学院
评论
0/150
提交评论