xUtils框架的介紹(四)

今天介紹xUtils的最後一個模塊——HttpUtils,拖了那麼久,終於要結束了。另外,碼字不易,如果大家有什麼疑問和見解,歡迎大家留言討論。HttpUtils是解決日常工作過程中繁雜的上傳下載文件以及各種Get和post請求的必備工具類,通過這個類,開源非常方便關注接口的業務,不必再再寫那麼冗長的代碼。下面全文都圍繞着四個中心點去依次展開,分別是:HttpGet請求,HttpPost請求,下載文件和上傳文件。

HttpGet請求。相信從事Android網絡應用的開發的同學對這個一定不會陌生,長期的開發會讓大家積累下一個可以複用的工具類。而xUtils就是幫助了我們把那些工具類給抽象整合成一個更具擴展性的幫助類。比如HtttpGet請求,這裏只簡要介紹下關鍵的應用方法,具體的細節還請大家自己去下載xUtils的源碼去研究研究了,我們介紹的足夠應用到我們的應用開發中去了。通常的HttpGet請求會把一系列的請求參數掛在請求地址的後面,拖出一節長長的尾巴,十分的惹人厭,這裏可以通過像HttpPost請求的參數那樣組成一個類似BasicNameValuePair的對象直接封裝到請求方法中去,省去拼接url的麻煩,同時也可以設置超時時間。另外請求的方法中提供了一個回調類,這個類中有處理不同請求結果的回調方法,比如說請求過程中的回調,請求成功的回調以及請求出現錯誤時的回調。下面直接上代碼看下。

   RequestParams params = new RequestParams();
        params.addQueryStringParameter("method", "info");
        params.addQueryStringParameter("access_token",
                "3.1042851f652496c9362b1cd77d4f849b.2592000.1377530363.3590808424-248414");

        HttpUtils http = new HttpUtils();
        http.configCurrentHttpGetCacheExpiry(1000 * 10);
        http.send(HttpRequest.HttpMethod.GET,
                "https://pcs.baidu.com/rest/2.0/pcs/quota",
                params,
                new RequestCallBack<String>() {

                    @Override
                    public void onStart() {
                        resultText.setText("conn...");
                    }

                    @Override
                    public void onLoading(long total, long current) {
                        resultText.setText(current + "/" + total);
                    }

                    @Override
                    public void onSuccess(String result) {
                        resultText.setText("response:" + result);
                    }


                    @Override
                    public void onFailure(HttpException error, String msg) {
                        resultText.setText(msg);
                    }
                });

HttpPost請求。爲了統一請求的風格,HttpPost請求的方式和HttpGet的幾乎可以說是一模一樣,一樣提供了各種對應不同結果的回調方法,大家自己看下面的代碼就曉得了,真是一目瞭然。

 RequestParams params = new RequestParams();
        params.addQueryStringParameter("method", "mkdir");
        params.addQueryStringParameter("access_token", "3.1042851f652496c9362b1cd77d4f849b.2592000.1377530363.3590808424-248414");
        params.addBodyParameter("path", "/apps/測試應用/test文件夾");

        HttpUtils http = new HttpUtils();
        http.send(HttpRequest.HttpMethod.POST,
                "https://pcs.baidu.com/rest/2.0/pcs/file",
                params,
                new RequestCallBack<String>() {

                    @Override
                    public void onStart() {
                        resultText.setText("conn...");
                    }

                    @Override
                    public void onLoading(long total, long current) {
                        resultText.setText(current + "/" + total);
                    }

                    @Override
                    public void onSuccess(String result) {
                        resultText.setText("upload response:" + result);
                    }


                    @Override
                    public void onFailure(HttpException error, String msg) {
                        resultText.setText(msg);
                    }
                });

下面爲大家介紹一個非常非常實用的功能,就是通過Http協議去下載文件,再也不必爲Android中下載文件而寫下一大坨一大坨的代碼,如此長的代碼調試起來真是能氣死人。還記得以前做過一個項目,有個需求就是能下載視頻的,而且還要能支持斷點下載,只寫那麼一個下載工具類就寫了一兩天,再加上調試,真心把人都給逼瘋了。要是xUtils早點在那個時候面世,想那時做那個需求也不必那麼通過。HttpUtils爲開發者提供了非常方便的下載api,可以通過簡單的幾個參數來實現下載,甚至斷點下載的功能。上代碼。

<span style="white-space:pre">	</span>HttpHandler  handler = http.download(
                downloadAddrEdit.getText().toString(),
                "/sdcard/fileexplorer.apk",
                true, // 如果目標文件存在,接着未完成的部分繼續下載。
                true, // 如果從請求返回信息中獲取到文件名,下載完成後自動重命名。
                new RequestCallBack<File>() {	

                    @Override
                    public void onStart() {
                        resultText.setText("conn...");
                    }

                    @Override
                    public void onLoading(long total, long current) {
                        resultText.setText(current + "/" + total);
                    }

                    @Override
                    public void onSuccess(File result) {
                        resultText.setText("downloaded:" + result.getPath());
                    }

                    @Override
                    public void onFailure(HttpException error, String msg) {
                        resultText.setText(error.getExceptionCode() + ":" + msg);
                    }
                });
注意:下載過程中如果需要暫停下載,也只需簡單的一行代碼來實現:mHandler.stop(),如果設置斷點下載的話,下次會重新開始的話,會自動從上次下載的斷點處繼續下載。


最後介紹的功能就是上傳文件了,這個也是在項目中也是非常常見的。比如用戶上傳頭像,再比如網盤應用需要把本地文件上傳到雲端等等。同時HttpUtils也同時爲開發者提供了上傳過程中和上傳結果的各個回調接口。大家在使用HttpUtils上傳文件的時候,只要仿照下面的代碼去碼代碼就快可以基本滿足業務的需要了。

<strong> </strong>RequestParams params = new RequestParams();
        params.addQueryStringParameter("method", "upload");
        params.addQueryStringParameter("path", "/apps/測試應用/test.zip");
        // 請在百度的開放access_tokenapi測試頁面找到自己的access_token
        params.addQueryStringParameter("access_token", "3.1042851f652496c9362b1cd77d4f849b.2592000.1377530363.3590808424-248414");
        params.addBodyParameter("file", new File("/sdcard/test.zip"));

        HttpUtils http = new HttpUtils();
        http.send(HttpRequest.HttpMethod.POST,
                "https://pcs.baidu.com/rest/2.0/pcs/file",
                params,
                new RequestCallBack<String>() {

                    @Override
                    public void onStart() {
                        resultText.setText("conn...");
                    }

                    @Override
                    public void onLoading(long total, long current) {
                        resultText.setText(current + "/" + total);
                    }

                    @Override
                    public void onSuccess(String result) {
                        resultText.setText("upload response:" + result);
                    }


                    @Override
                    public void onFailure(HttpException error, String msg) {
                        resultText.setText(msg);
                    }
                });


好了,xUtils的介紹就到此爲止了,後面我會爲大家介紹點Java基礎,Java內存處理以及國外廣受歡迎的Android各種的框架,歡迎大家的關注。如果覺得對你有所幫助,歡迎大家訂閱我的微信公衆賬號——Android乾貨分享。下面是微信的二維碼,沒事你就搜一下,爲你提供及時高質的Android乾貨。技術交流QQ羣:318588906,歡迎大家加羣,共同探討下Android和Java技術,一起壯大我們的微信乾貨分享社區。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章