NoHttp是一個開源的Android網路框架,代碼託管在Github。 支持並發,支持異步/同步請求,自動維持Cookie,大檔案/多檔案上傳,檔案下載。支持304快取,302/303重定向,支持通過代理請求。
NoHttp提供了jar包、源碼、gradle依賴等方式給開發者使用,開發者可以根據自身情況進行選擇。
NoHttp支持Android2.2及以上版本,內部使用HttpURLConnection請求網路,為OkHttp提供了接口,可以把HttpURLConnection替換為OkHttp作為socket層,不過Android4.4以上內部HttpURLConnection已經是用OkHttp實現了。
NoHttp是基於佇列的形式請求,可以取消某個請求,可以取消某幾個指定請求,可以通過佇列取消所有請求。
NoHttp旨在為開發者提供一個簡單、方便、高效、功能全、體積小的http網路框架。
基本介紹
- 中文名:NoHttp
- 外文名:NoHttp
- 作者:YOLANDA
- 是否開源:是
- 適用平台:Android
- 定位:最好用的Android網路框架
歷史發展,特性,發起請求,接受請求結果,取消請求,檔案下載模組,
歷史發展
NoHttp最早是使用Httpclient做了些簡單的封裝,只是在公司內部使用。後來隨著Android棄用了Httpclient後,NoHttp換用HttpURLConnection做了封裝,直到Android6.0時Android SDK刪除了HttpClient的api後才真正的有了NoHttp。於是做了大量的重構工作,把NoHttp從項目中獨立出來,做了開源。
在Android4.4開始系統的HttpURLConnection使用OkHttp的接口實現,NoHttp也對OkHttp做了支持,所以NoHttp是支持Android2.2-以上版本的。
目前NoHttp的源碼託管在Github上,提供了源碼、jar包、demo、gradle依賴等使用方式,作者建立了QQ諮詢群,也在CSDN上開了部落格介紹NoHttp的各種使用方法與問題解答,所以對於國內的開發者來說是一個不錯的選擇。
特性
- 支持HTTP/HTTPS,自動維持Cookie,異步/同步請求,大檔案/多檔案上傳,檔案下載。
- 支持304快取,302/303重定向,支持通過代理伺服器訪問地址。
- NoHttp是佇列,自動為請求排隊,可以取消指定請求,可以取消佇列所有請求,亦可以停止佇列。
- 支持請求String、Bitmap、JsonObject、可自定義擴展請求類型(demo中的FastJsonRequest等)
- API使用簡單,Request對象包涵參數、檔案、請求頭等;Response對象包涵回響內容, 回響頭等信息。
發起請求
創建請求佇列
RequestQueue queue = NoHttp.newRequestQueue();
請求String數據
Request<String> request = NoHttp.createStringRequest(url);request.add("userName", "yolanda");request.add("file", new FileBinary(file));queue.add(0, request, responseListener);
請求Bitmap數據
Request<Bitmap> request = NoHttp.createImageRequest(url);queue.add(what, request, responseListener);
請求Json數據
// JsonObjectRequest<JSONObject> request = NoHttp.createJsonObjectRequest(url);queue.add(what, request, responseListener);...// JsonArrayRequest<JSONArray> request = NoHttp.createJsonArrayRequest(url);queue.add(what, request, responseListener);
子執行緒同步請求
// 在當前執行緒發起請求,線上程這么使用Request<String> request = NoHttp.createStringRequest(url);Response<String> response = NoHttp.startRequestSync(request);if (response.isSucceed()) { // 請求成功} else { // 請求失敗}
接受請求結果
以接受String結果為例,其它雷同
OnResponseListener<String> responseListener = new OnResponseListener<>() { // 請求開始時,可以顯示一個Dialog public void onStart(int what) {} // 請求接受時,關閉Dialog public void onFinish(int what) {} // 接受請求結果 public void onSucceed(int what, Response<String> response) { // 拿到請求結果 String result = response.get(); } // 請求失敗或者發生異常 public void onFailed(int what, String url, String error) {}};
取消請求
取消單個請求
Request<String> request = NoHttp.createStringRequest(url);...request.cancel();
取消佇列中的指定請求
Request<String> request = NoHttp.createStringRequest(url);request.setCancelSign(sign);...queue.cancelBySign(sign);// 取消用sign標誌的請求
取消所有請求
queue.cancelAll();
停止佇列
queue.stop();
檔案下載模組
創建下載佇列
RequestQueue queue = NoHttp.newDownloadRequestQueue();
發起下載請求
//下載檔案DownloadRequest downloadRequest = NoHttp.createDownloadRequest(url);// what 區分下載// downloadRequest 下載請求對象// downloadListener 下載監聽queue.add(0, downloadRequest, downloadListener);
暫停/停止下載
downloadRequest.cancel();
監聽下載過程/進度
private DownloadListener downloadListener = new DownloadListener() { // 開始下載 public void onStart(int what, Headers header, long count) {} // 下載進度變化 public void onProgress(int what, int progress, long downCount) { // progress就是進度值 } // 下載完成 public void onFinish(int what, String filePath) {} // 下載出錯 public void onDownloadError(int what, String error) {} // 下載暫停或者取消 public void onCancel(int what) {}};