# NoHttp **Repository Path**: zhao451966/NoHttp ## Basic Information - **Project Name**: NoHttp - **Description**: NoHttp支持HTTP/HTTPS、异步请求、同步请求、大/多文件上传、文件下载、自定义请求头、自定义参数。请求队列自动排队,取消某个请求,取消队列所有请求等。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-03-23 - **Last Updated**: 2023-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NoHttp (**QQ**交流群:**46523908**, E-mail: **smallajax@foxmail.com**) 这里简单的列出几个使用Demo,具体的请看Demo **NoHttp特性:** * A. 支持HTTP/HTTPS, Https证书, 自动维持Cookie, 异步/同步请求, 大文件/多文件上传, 文件下载, 你不用理睬复杂的Http的API, 所以它的名字是NoHttp. * B. NoHttp支持请求队列, 自动为请求排队, 可以取消指定请求, 可以取消队列所有请求 * C. 支持请求String, Bitmap, JsonObject, 可自定义扩展请求类型 * D. API使用简单, Request对象包涵参数, 请求头, Cookie, 上传文件等, Response对象包涵响应, 响应头等信息. ##一. 请求Http接口 **1. 请求String类型数据** 上传文件, 提交普通参数, 添加请求头, 添加Cookie等 ``` RequestQueue requestQueue = NoHttp.newRequestQueue(SampleApplication.getInstance()); // 初始化需要url, method Request mRequest = NoHttp.createStringRequest(url, RequstMethod.POST); // 上传文件 mRequest.add("head", new FileBinary(file, "head.png")); mRequest.add("head_small", new FileBinary(new File(filePath), "head_small.png")); // 添加普通参数 mRequest.add("userName", "yolanda");// String类型 mRequest.add("userAge", 20);// int类型 mRequest.add("userSex", '1');// char类型 // 添加Cookie mRequest.addCookie(HttpCookie); mRequest.addCookie(CookieStore); // 添加请求头 reqeustQueue.addHead("Author", "user=yolanda"); //添加到请求队列 requestQueue.add(what, mRequest, OnResponseListener); ``` **2. 请求Bitmap类型数据** ``` Request mRequest = NoHttp.createImageRequest(url); requestQueue.add(what, mRequest, OnResponseListener); ``` **3. 取消一个请求** ``` request.cancel(); ``` **4. 从队列中取消指定的请求** ``` requestQueue.cancelBySign(Object); ``` **5. 发送一个同步请求** ``` // 在当前线程发起请求,在线程这么使用 Request request = NoHttp.createStringRequest(url, RequestMethod.POST); Response response = NoHttp.startRequestSync(context, request); if (response.isSucceed()) { Logger.i("响应消息: " + response.get()); } else { Logger.i("错误信息: " + response.getErrorMessage()); } ``` ##二. 接受响应 ``` OnResponseListener responseListener = new OnResponseListener() { @Override public void onStart(int what) { // 请求开始时,可以显示一个Dialog } @Override public void onFinish(int what) { // 请求接受时,关闭Dialog } @Override public void onSucceed(int what, Response response) { // 接受请求结果 String result = response.get(); // Bitmap imageHead = response.get(); // 如果是bitmap类型, 都是同样的用法 } @Override public void onFailed(int what, String url, Object tag, CharSequence message) { // 请求失败或者发生异常 } }; ``` ##三. 自定义请求类型: JsonObject ``` // 使用自定义JsonObject的请求 Request mRequest = new JsonRequest(url, RequestMethod.GET); mReqeust.add("count", 3); requestQueue.add(what, mRequest, OnResponseListener); //自定义请求类型:继承RestRequestor后可自定义请求对象 public class JsonRequest extends RestRequestor { public JsonRequest(String url, int requestMethod) { super(url, requestMethod); } public JsonRequest(String url) { super(url); } @Override public JSONObject parseResponse(String url, String contentType, byte[] byteArray) { String jsonString = null; JSONObject jsonObject = null; if (byteArray != null && byteArray.length > 0) { try { String charset = HeaderParser.parseHeadValue(contentType, "charset", ""); jsonString = new String(byteArray, charset); } catch (UnsupportedEncodingException e) { Logger.w("Charset error in ContentType returned by the server:" + contentType); jsonString = new String(byteArray); } } try { jsonObject = new JSONObject(jsonString); } catch (JSONException e1) { e1.printStackTrace(); } return jsonObject; } } ``` ##五. 下载文件 ``` //下载文件 mDownloadQueue = NoHttp.newDownloadQueue(context); // what 区分下载 // url 下载地址 // fileFloader 保存的文件夹 // fileName 文件名 // isRange 是否断点续传下载 // DownloadListener 下载状态接受: 开始下载、下载出错,下载进度变化,下载完成 DownloadRequest request = new DownloadRequestor(0, url, fileFloder, filename, true, listener); mDownloadQueue.add(downloadRequest); ``` **1. 取消或者暂停下载** ``` downloadRequest.cancel(); ```