Android之封裝好的異步網絡請求框架

1.簡介 
Android中網絡請求通常使用Apache HTTP Client或者採用HttpURLConnection,可是直接使用這兩個類庫須要寫大量的代碼才能完成網絡post和get請求,而使用這個MyHttpUtils庫能夠大大的簡化操做,它是基於HttpURLConnection,全部的請求都是獨立在UI主線程以外,沒有經過CommCallback回調方法處理請求結果, 沒有了子線程、沒有了handle,鏈式的變成使得代碼更加清晰 。php

2.特性 java

  1. 支持get、post請求,文件下載,上傳等;
  2. 支持http和https的協議;
  3. 支持設置鏈接、讀取超時時間(可選);
  4. 支持json格式的請求結果(不管json格式多複雜,都能搞定);
  5. 支持傳入JavaBean對象(解析以後的javabean對象);
  6. 支持回調方法中反應傳入javabean對象,這樣能夠在回調方法中直接拿到解析事後的javabean對象;
  7. 支持回調方法中更新UI(因此叫異步請求了)。

說明:java中一切皆對象,這裏的JavaBean對象就是你請求接口以後返回的json數據所對應的實體,使用時返回的json數據可根據你給的對象自動解析並返回對象。android

3.使用git

gradle添加依賴(添加完以後Sync一下):github

compile 'com.huangdali:myhttputils:2.0.2'

get:json

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);
                    }
                });
    }

文件下載:app

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" />

文件上傳和下載也須要添加權限ide

<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

相關文章
相關標籤/搜索