NoHttp

NoHttp

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

相關詞條

熱門詞條

聯絡我們