zoukankan      html  css  js  c++  java
  • Android之封装好的异步网络请求框架

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

    2.特性 

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

    说明:java中一切皆对象,这里的JavaBean对象就是你请求接口之后返回的json数据所对应的实体,使用时返回的json数据可根据你给的对象自动解析并返回对象。

    3.使用

    gradle添加依赖(添加完之后Sync一下):

    compile 'com.huangdali:myhttputils:2.0.2'

    get:

    public void onGet() {
            String url = "http://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:

    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 onDownload() {
            String url = "http://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) + "%");
                        }
                    });
        }

    别忘加网络权限

    <uses-permission android:name="android.permission.INTERNET" />

    文件上传和下载也需要添加权限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

     

    源码点击下载: https://github.com/DickyQie/android-network-request

  • 相关阅读:
    android webview cookie同步
    session和cookie
    对称加密与非对称加密
    理解java回调机制
    android studio命令
    android studio友盟gradle多渠道打包
    [c++] final override keyword
    [C++] Returning values by reference in C++
    [c++] polymorphism without virtual function
    [C++] NEW Advanced Usage
  • 原文地址:https://www.cnblogs.com/zhangqie/p/6367056.html
Copyright © 2011-2022 走看看