天天看點

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...");  

                 }  

                 public void onloading(long total, long current) {  

                     resulttext.settext(current + "/" + total);  

                 public void onsuccess(string result) {  

                     resulttext.settext("response:" + result);  

                 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...");  

                   }  

                   public void onloading(long total, long current) {  

                       resulttext.settext(current + "/" + total);  

                   public void onsuccess(string result) {  

                       resulttext.settext("upload response:" + result);  

                   public void onfailure(httpexception error, string msg) {  

                       resulttext.settext(msg);  

               });  

下面為大家介紹一個非常非常實用的功能,就是通過http協定去下載下傳檔案,再也不必為android中下載下傳檔案而寫下一大坨一大坨的代碼,如此長的代碼調試起來真是能氣死人。還記得以前做過一個項目,有個需求就是能下載下傳視訊的,而且還要能支援斷點下載下傳,隻寫那麼一個下載下傳工具類就寫了一兩天,再加上調試,真心把人都給逼瘋了。要是xutils早點在那個時候面世,想那時做那個需求也不必那麼通過。httputils為開發者提供了非常友善的下載下傳api,可以通過簡單的幾個參數來實作下載下傳,甚至斷點下載下傳的功能。上代碼。

              httphandler  handler = http.download(  

                downloadaddredit.gettext().tostring(),  

                "/sdcard/fileexplorer.apk",  

                true, // 如果目标檔案存在,接着未完成的部分繼續下載下傳。  

                true, // 如果從請求傳回資訊中擷取到檔案名,下載下傳完成後自動重命名。  

                new requestcallback<file>() {   

                    @override  

                    public void onstart() {  

                        resulttext.settext("conn...");  

                    }  

                    public void onloading(long total, long current) {  

                        resulttext.settext(current + "/" + total);  

                    public void onsuccess(file result) {  

                        resulttext.settext("downloaded:" + result.getpath());  

                    public void onfailure(httpexception error, string msg) {  

                        resulttext.settext(error.getexceptioncode() + ":" + msg);  

                });  

注意:下載下傳過程中如果需要暫停下載下傳,也隻需簡單的一行代碼來實作:mhandler.stop(),如果設定斷點下載下傳的話,下次會重新開始的話,會自動從上次下載下傳的斷點處繼續下載下傳。

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

        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>() {  

                    public void onsuccess(string result) {  

                        resulttext.settext("upload response:" + result);  

                        resulttext.settext(msg);  

繼續閱讀