Android中应对封装好的数据库jar包请求Http数据的结果回调
本文中阐述如何对封装好的jar包中的方法进行监听获取请求的结果:
- 定义抽象函数
- 定义封装好的网络请求代码示例
- 执行请求结果数据处理
定义抽象函数
定义的回调的代码(获取数据后如何处理)内容一般是调用者来定义,所以首先要实现一个抽象函数用于调用者实现:
public interface OnRequestResult {
/**
* 返回数据,处理成功获取返回数据的情况
* @param response
*/
public void onResult(int requestTag, Response response);
/**
* 网络异常,处理各类延时异常导致没有获取返回数据的情况,统一为网络异常
* @param code
*/
public void onNetErroe(int requestTag, int code);
}
定义封装好的网络请求代码示例
/**
* 登录代码块为例,传递封装好jar包中所需要的数据之后,执行定义的excutors方法
* @param userName
* @param password
* excutors方法参数解析:
* HttpLogin参数是用于区分属于各个类别的请求
* openClient是开始请求的方法,方法URL等已经封装进入jar包
* request是开始请求的数据的所携带的参数信息
*/
public void login(String userName, String password) {
//自定义的Utils工具类中,在数据请求前用于判断是否有网络连接
if (!Utils.isNet((Activity) context)) {
//自定义的抽象函数用于调用者实现网络错误情况
onRequestResult.onNetErroe(HttpLogin, AppConstant.NET_ERROR);
return;
}
LoginRequest request = new LoginRequest();
request.setUserName(userName);
request.setPassword(password);
new excutors(HttpLogin, openClient, request, context).start();
}
执行请求结果数据处理
/**
* 请求结果
* 当有数据返回的时候就会执行end方法,如果没有就不会执行
*/
class excutors extends OpenExecutors {
int requestTag;
boolean isTimeOut;
//定义网络超时的方法
Runnable run = new Runnable() {
@Override
public void run() {
isTimeOut = true;
if (context != null)
onRequestResult.onNetErroe(requestTag, AppConstant.NET_ERROR);
}
};
public excutors(final int requestTag, OpenClient client, Request request, Context context) {
super(client, request, context);
this.requestTag = requestTag;
//延时定义网络超时异常处理任务
handler.postDelayed(run, RequstTimeOutMillise);
}
//封装好的获取返回结果
@Override
public void end(Response response) {
//网络没有超时的情况,移除handler中的任务函数,成功获取返回数据执行调用者自定义代码块
if (!isTimeOut) {
handler.removeCallbacks(run);
onRequestResult.onResult(requestTag, response);
}
}
}
调用函数处理结果数据
@Override
public void onResult(int requestTag, Response response) {
if (requestTag == HttpClient.HttpLogin) {// 首页数据
LoginResponse r = (LoginResponse) response;
if (r.isSuccess() && !StringUtils.isEmpty(r.getLogin())) {
//成功获取数据,界面更新
}
}
@Override
public void onNetErroe(int requestTag, int code) {
if (requestTag == HttpClient.HttpLogin) {
showToast("网络异常,最新商品加载失败");
}
}
本文主要阐述了在封装好的网络请求的jar包的前提下,自定义一个类用于处理获取各个不同数据成功与失败的情况。本文主要涉及的内容:
1.定义接口的方法实现了类与类之间的通信
2.灵活运用handler机制延时处理网络加载异常的情况,以及在成功获取网络数据之后移除延时加载的任务。