• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 接口回调封装,回调封装

接口回调封装,回调封装

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了接口回调,android 接口回调,java 接口回调,android中接口回调,安卓接口回调等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

接口回调封装,回调封装


  

 

  在开发的过程中,关于对请求回调数据的处理以及消息提示,我发现了两个问题:

  1.别人都怎么做的我不知道,但是我看到的,很多人在写网络请求的时候,不管是自己直接写的,或者还是直接使用第三方网络框架,在拿到数据的时候,一般都是自己根据返回的数据中,使用约定好的key去解析自己需要的数据,直接使用或者转换成javaBean、数组。话说,这样很麻烦不是吗,每一次请求数据就要去解析一次,不同的页面,那得重复写多少代码,而且看起来也比较乱。

  2.很多时候 ,数据请求成功或者失败,总要给用户一个简短的提示。提示什么样的文案和什么情况下需要提示,这也是个比较麻烦的问题。

  为此,我对请求回调进行了封装,代码结构清晰了很多,而且也比较好用,主要做到了以下功能:

  1.如果返回的数据是javaBean或者数组Array,只需要在请求时,在请求时的CallBack传递对应的数据类型和JavaBean.class,这样数据成功回调后,就可以把返回的Object 对象直接转换成对应的 JavaBean.class 实体对象或者 Array 对象。当然,如果返回的只是简单的数据类型的话,什么都不需要设置就可以了,直接使用返回的 String data 即可。

  2.不管回调成功还是失败,统一弹出提示的话,直接在请求时的CallBack中传递个Context 对象;不需要提示则不传;想自己定制提示内容,则不传,并在CallBack 中对应的 onSuccess、onFailure方法中,弹出自己想要的内容。

 

  废话不多说了,直接上代码~

 

  一、消息提不提示的问题,我以获取验证码接口为例。

1.不主动弹出提示消息提示。

a.发起请求

ApiClient.getVerificationCode(phone,new VerificationCodeCallback());

b.数据回调

// 获取验证码回调
    public class VerificationCodeCallback extends ApiUiCallback {

        @Override
        public void onFailure(HttpException e, String s) {
            super.onFailure(e, s);
           
        }

        @Override
        public void onSuccess(String data, int resultCode, String resultInfo, Object outDo) {
            super.onSuccess(data, resultCode, resultInfo, outDo);
            if (resultCode == 0) {
                // TODO
            }
        }
    }

想自己定制提示内容,在CallBack 中对应的 onSuccess、onFailure方法中,弹出自己想要的内容即可。

 

2.主动弹出提示消息提示。

a.发起请求

ApiClient.getVerificationCode(phone,new VerificationCodeCallback(this));

b.数据回调

// 获取验证码回调
    public class VerificationCodeCallback extends ApiUiCallback {
        public VerificationCodeCallback(Context context) {
            super(context);
        }

        @Override
        public void onFailure(HttpException e, String s) {
            super.onFailure(e, s);
           
        }

        @Override
        public void onSuccess(String data, int resultCode, String resultInfo, Object outDo) {
            super.onSuccess(data, resultCode, resultInfo, outDo);
            if (resultCode == 0) {
                // TODO
            }
        }
    }

 

主动弹出的话,需要在回调类中 实现构造方法 VerificationCodeCallback(Context context),并在使用的时候传递个Context。

 

 二、数据返回Array或者 单一 JavaBean 问题

  方法说明:

setOutClass()中传递的是数组中的数据实体类。
setResponseTypeEnum()中传递的是数据的类型 单个JavaBean 还是 Array

1. 返回 Array

a.发起请求

        ApiClient.openCityList(new OpenCityListCallback().setOutClass(String.class).setResponseTypeEnum(ResponseTypeEnum.JSON_ORIGINAL_RESULT_ARRAY));

b.数据回调

public class OpenCityListCallback extends ApiUiCallback {
        @Override
        public void onFailure(HttpException e, String s) {
            super.onFailure(e, s);
            showToast(R.string.network_anomaly);
        }

        @Override
        public void onSuccess(String data, int resultCode, String resultInfo, Object outDo) {
            super.onSuccess(data, resultCode, resultInfo, outDo);
            if (outDo instanceof List) {
                List<String> list = (List<String>) outDo;
                // TODO
            } else {
                showToast(resultInfo);
            }
        }

    }

 

2. 返回 单一 JavaBean 

a.发起请求

        ApiClient.checkNewVersion(new CheckNewVersionCallback().setResponseTypeEnum(ResponseTypeEnum.JSON_ORIGINAL_RESULT_BEAN).setOutClass(UpdateInfo.class));

 

b.数据回调

 

public class CheckNewVersionCallback extends ApiUiCallback {
        @Override
        public void onFailure(HttpException e, String s) {
            super.onFailure(e, s);

        }

        @Override
        public void onSuccess(String data, int resultCode, String resultInfo, Object outDo) {
            super.onSuccess(data, resultCode, resultInfo, outDo);
            if (resultCode == 0) {
                if (outDo instanceof UpdateInfo) {
                    updateInfo = (UpdateInfo) outDo;
                    // TODO
                }
            }
        }
    }

 

  二话不说上源码!!!!

1. 主要的目录结构

 

 2.  ApiConstant.class

/**
 * Created by ding on 2016/9/26
 */
public class ApiConstant {

    /**
     * 字符集:UTF-8
     */
    public static final String CHARSET_UTF8 = "UTF-8";
    /**
     * 默认字符集
     */
    public static final String DEFUALT_CHARSET = CHARSET_UTF8;
}

 3.  ResponseTypeEnum.class

/**
 * 返回数据类型常量
 * Created by ding on 2016/9/26.
 */
public enum ResponseTypeEnum {

    /**
     * JSON格式字符串;
     * 基本类型按JSON格式原样输出;
     * data内容封装到Result对象的data属性,再输出JSON格式字符串;
     * data是普通JavaBean;
     */
    JSON_ORIGINAL_RESULT_BEAN("json_orig_result", true, false),
    /**
     * JSON格式字符串;
     * 基本类型按JSON格式原样输出;
    



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • [android] post请求接口demo测试代码,androiddemo
  • android中的回调请求的个人理解,android回调
  • 接口回调封装,回调封装
  • Android中&quot;get&quot;,&quot;post&quot;请求的其中三种常用数据提交方式,android常用数据
  • Android基于回调的事件处理

相关文章

  • 2017-05-26ARM汇编中LDR伪指令和LDR指令
  • 2017-05-26Android开发之ActionBar,androidactionbar
  • 2017-05-26Android新手入门2016(10)--GridView
  • 2017-05-26使用 Diagwait 作为诊断工具,获取用于诊断 Oracle Clusterware 节点驱逐
  • 2017-05-26androidStudio通过svn进行版本控制,androidstudiosvn
  • 2017-05-26Android音频开发(5):音频数据的编解码
  • 2017-05-26Android网络编程(三)Volley用法全解析
  • 2017-05-26Android开发6:Service的使用(简单音乐播放器的实现),androidservice
  • 2017-05-26Android实战简易教程-第七十一枪(异步网络下载网络图片及图片廊制作)
  • 2017-05-26android:Activity数据传递之对象(Serializable)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • tcpdump的移植和使用方法
    • Android SDK目录及版本号区别
    • 如何为APK签名?,APK签名?
    • 几个常用的adb命令,常用adb命令
    • Java时间间隔问题在Android中的使用,javaandroid
    • WebView,androidwebview
    • 提升Android ListView性能的几个技巧
    • Handler造成的内存泄漏(一),handler泄漏
    • Android安全专项-利用androguard分析微信
    • Android中使用ExpandableListView实现好友分组,expandablelistview

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有