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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM