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机制延时处理网络加载异常的情况,以及在成功获取网络数据之后移除延时加载的任务。