Android-xUtils架構介紹(四)

來源:互聯網
上載者:User

標籤:

今天介紹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,可以通過簡單的幾個參數來實現下載,甚至斷點下載的功能。上代碼。

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上傳檔案的時候,只要仿照下面的代碼去碼代碼就快可以基本滿足業務的需要了。

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

 

 

轉自:http://my.oschina.net/jack1900/blog/174439

Android-xUtils架構介紹(四)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.