![【移动应用开发技术】AsyncHttpClient 实战总结及思考_第1页](http://file4.renrendoc.com/view/eada7e60e9548c9e94618c1ab85744c2/eada7e60e9548c9e94618c1ab85744c21.gif)
![【移动应用开发技术】AsyncHttpClient 实战总结及思考_第2页](http://file4.renrendoc.com/view/eada7e60e9548c9e94618c1ab85744c2/eada7e60e9548c9e94618c1ab85744c22.gif)
![【移动应用开发技术】AsyncHttpClient 实战总结及思考_第3页](http://file4.renrendoc.com/view/eada7e60e9548c9e94618c1ab85744c2/eada7e60e9548c9e94618c1ab85744c23.gif)
![【移动应用开发技术】AsyncHttpClient 实战总结及思考_第4页](http://file4.renrendoc.com/view/eada7e60e9548c9e94618c1ab85744c2/eada7e60e9548c9e94618c1ab85744c24.gif)
![【移动应用开发技术】AsyncHttpClient 实战总结及思考_第5页](http://file4.renrendoc.com/view/eada7e60e9548c9e94618c1ab85744c2/eada7e60e9548c9e94618c1ab85744c25.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沪教版数学九年级上册26.2《二次函数的图象与性质》(第2课时)听评课记录
- 粤人版八年级地理上册2.2《气候》听课评课记录
- 电信客服服务中的问题解决策略
- 电商平台用户数据分析与精准营销
- 现代企业团队建设的心理契约与激励机制
- 电商平台物流配送的优化方法
- 案例研究如何进行成功科研选题与文献检索
- 2025年度智慧城市建设项目合同施工范围及服务标准
- 2025年度绿色建筑项目贷款合同公证
- 电商平台的供应链管理优化策略
- 运输行业春节安全生产培训 文明驾驶保平安
- 体验式沙盘-收获季节
- 老年护理陪护培训课件
- 2019年420联考《申论》真题(山西卷)试卷(乡镇卷)及答案
- 医院投诉纠纷及处理记录表
- YY/T 0698.5-2023最终灭菌医疗器械包装材料第5部分:透气材料与塑料膜组成的可密封组合袋和卷材要求和试验方法
- 酱香型白酒工厂设计
- 【深度教学研究国内外文献综述2100字】
- 牵引管道孔壁与管道外壁之间注浆技术方案
- 新人教版四年级下册数学教材解读课件
- 肛周脓肿完整版课件
评论
0/150
提交评论