【移动应用开发技术】AsyncHttpClient 实战总结及思考_第1页
【移动应用开发技术】AsyncHttpClient 实战总结及思考_第2页
【移动应用开发技术】AsyncHttpClient 实战总结及思考_第3页
【移动应用开发技术】AsyncHttpClient 实战总结及思考_第4页
【移动应用开发技术】AsyncHttpClient 实战总结及思考_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论