Android应用开发之Android之封装好的异步网络请求框架
白羽 2018-08-10 来源 :网络 阅读 973 评论 0

摘要:本文将带你了解Android应用开发之Android之封装好的异步网络请求框架,希望本文对大家学Android有所帮助

        本文将带你了解Android应用开发之Android之封装好的异步网络请求框架,希望本文对大家学Android有所帮助


1.简介Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用这个MyHttpUtils库可以大大的简化操作,它是基于HttpURLConnection,所有的请求都是独立在UI主线程之外,没有通过CommCallback回调方法处理请求结果,没有了子线程、没有了handle,链式的变成使得代码更加清晰 。
2.特性

支持get、post请求,文件下载,上传等;
支持http和https的协议;
支持设置连接、读取超时时间(可选);
支持json格式的请求结果(无论json格式多复杂,都能搞定);
支持传入JavaBean对象(解析之后的javabean对象);
支持回调方法中反应传入javabean对象,这样可以在回调方法中直接拿到解析过后的javabean对象;
支持回调方法中更新UI(所以叫异步请求了)。

说明:java中一切皆对象,这里的JavaBean对象就是你请求接口之后返回的json数据所对应的实体,使用时返回的json数据可根据你给的对象自动解析并返回对象。
3.使用
gradle添加依赖(添加完之后Sync一下):
 
Html代码  compile 'com.huangdali:myhttputils:2.0.2'  compile 'com.huangdali:myhttputils:2.0.2'
 
 
get:
 
Java代码  public void onGet() {         String url = "//gpj.zhangwoo.cn/app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments";         new MyHttpUtils()                 .url(url)//请求的url                 .setJavaBean(UserBean.class)//设置需要解析成的javabean对象                 .setReadTimeout(60000)//设置读取超时时间,不设置的话默认为30s(30000)                 .setConnTimeout(6000)//设置连接超时时间,不设置的话默认5s(5000)                 .onExecute(new CommCallback<UserBean>() {//开始执行异步请求,传入一个通用回调对象,泛型为返回的javabean对象                     @Override                     public void onSucess(UserBean bean) {//成功之后回调                         Util.showMsg(MainActivity.this, bean.getData().get(0).getDepartname());                     }                       @Override                     public void onFailed(String msg) {//失败时候回调                         Util.showMsg(MainActivity.this, msg);                     }                 });     }   public void onGet() {
        String url = "//gpj.zhangwoo.cn/app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments";
        new MyHttpUtils()
                .url(url)//请求的url
                .setJavaBean(UserBean.class)//设置需要解析成的javabean对象
                .setReadTimeout(60000)//设置读取超时时间,不设置的话默认为30s(30000)
                .setConnTimeout(6000)//设置连接超时时间,不设置的话默认5s(5000)
                .onExecute(new CommCallback<UserBean>() {//开始执行异步请求,传入一个通用回调对象,泛型为返回的javabean对象
                    @Override
                    public void onSucess(UserBean bean) {//成功之后回调
                        Util.showMsg(MainActivity.this, bean.getData().get(0).getDepartname());
                    }

                    @Override
                    public void onFailed(String msg) {//失败时候回调
                        Util.showMsg(MainActivity.this, msg);
                    }
                });
    }
 post:
 
 
Java代码  public void onPost() {          HashMap<String, String> param = new HashMap<>();          param.put("c", "member");          param.put("a", "getdepartments");          new MyHttpUtils()                  .url(urls2)                  .addParam(param)                  .setJavaBean(UserBean.class)                  .onExecuteByPost(new CommCallback<UserBean>() {///实体类自动解析                      @Override                      public void onSucess(UserBean remarkBean) {                          Log.i("tag",remarkBean.toString());                          Util.showMsg(MainActivity.this, remarkBean.getData().get(0).getDepartname());                      }                      @Override                      public void onFailed(String msg) {                          Util.showMsg(MainActivity.this, msg);                      }                  });      }  public void onPost() {
        HashMap<String, String> param = new HashMap<>();
        param.put("c", "member");
        param.put("a", "getdepartments");
        new MyHttpUtils()
                .url(urls2)
                .addParam(param)
                .setJavaBean(UserBean.class)
                .onExecuteByPost(new CommCallback<UserBean>() {///实体类自动解析
                    @Override
                    public void onSucess(UserBean remarkBean) {
                        Log.i("tag",remarkBean.toString());
                        Util.showMsg(MainActivity.this, remarkBean.getData().get(0).getDepartname());
                    }
                    @Override
                    public void onFailed(String msg) {
                        Util.showMsg(MainActivity.this, msg);
                    }
                });
    }
 文件下载:
 
 
Java代码  public void onDownload() {          String url = "//avatar.csdn.net/8/6/0/2_dickyqie.jpg";          new MyHttpUtils()                  .url(url)                  .setFileSavePath("/sdcard/downloadtest")//不要这里只是填写文件保存的路径,不包括文件名哦                  .setReadTimeout(5 * 60 * 1000)//由于下载文件耗时比较大,所以设置读取时间为5分钟                  .downloadFile(new CommCallback<String>() {                      @Override                      public void onSucess(String msg) {                          Util.showMsg(MainActivity.this, msg);                      }                        @Override                      public void onFailed(String s) {                        }                      /**                      * 可以重写进度回调方法                      * @param total                      * @param current                      */                      @Override                      public void onDownloading(long total, long current) {                          tvProgress.setText("当前进度:" + new DecimalFormat("######0.00").format(((double) current / total) * 100) + "%");                      }                  });      }  public void onDownload() {
        String url = "//avatar.csdn.net/8/6/0/2_dickyqie.jpg";
        new MyHttpUtils()
                .url(url)
                .setFileSavePath("/sdcard/downloadtest")//不要这里只是填写文件保存的路径,不包括文件名哦
                .setReadTimeout(5 * 60 * 1000)//由于下载文件耗时比较大,所以设置读取时间为5分钟
                .downloadFile(new CommCallback<String>() {
                    @Override
                    public void onSucess(String msg) {
                        Util.showMsg(MainActivity.this, msg);
                    }

                    @Override
                    public void onFailed(String s) {

                    }
                    /**
                     * 可以重写进度回调方法
                     * @param total
                     * @param current
                     */
                    @Override
                    public void onDownloading(long total, long current) {
                        tvProgress.setText("当前进度:" + new DecimalFormat("######0.00").format(((double) current / total) * 100) + "%");
                    }
                });
    }
别忘加网络权限
 
 
Html代码  <uses-permission android:name="android.permission.INTERNET" />  <uses-permission android:name="android.permission.INTERNET" />
文件上传和下载也需要添加权限
 
 
Html代码  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
 

 
     

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程