QQ技术交流1群:46523908
QQ技术交流2群:46505645
NoHttp 源码及Demo: https://github.com/Y0LANDA/NoHttp
NoHttp是专门做Android网络请求与下载的框架。
NoHttp是一个专门做Android网络相关的框架.
随着Android弃用HttpClient后,Google也发布了Volley,在Android2.3之前使用HttpClient做请求,2.3之后使用URLConnection做请求,看过Volley源码的同学应该知道,Volley虽然在2.3之后请求网络时使用URLConnection,但是请求完成后解析过程还是用HttpClient的API,随着Android6.0中HttpClient的Api被删除,Volley也不能关联源码使用了,此时NoHttp应运而生恰恰很好的解决了这个问题,下面为大家介绍一下NoHttp框架的使用。
- 支持HTTP/HTTPS,自动维持Cookie,异步/同步请求,大文件/多文件上传,文件下载。
- 支持304缓存,302/303重定向,支持通过代理服务器访问地址(如: Google)。
- NoHttp是队列,自动为请求排队,可以取消指定请求, 可以取消队列所有请求,亦可以停止队列。
- 支持请求String、Bitmap、JsonObject、可自定义扩展请求类型。
- API使用简单,Request对象包涵参数、文件、请求头等;Response对象包涵响应内容,响应头等信息。
// 引用最新版
compile 'com.yolanda.nohttp:nohttp:+'
// 或则引用指定版本
compile 'com.yolanda.nohttp:nohttp:1.0.0'
// 创建请求队列,正式项目中建议使用全局单例
RequestQueue queue = NoHttp.newRequestQueue();
// 请求对象
Request<String> request = NoHttp.createStringRequest(url, requestMethod);
//添加请求头
request.addHeader("AppVersioin", "2.0");
// 添加请求参数
request.add("userName", "yolanda");
//添加文件
request.add("file", new FileBinary(file));
// 添加到队列
queue.add(0, request, responseListener);
// JsonObject
Request<JSONObject> request = NoHttp.createJsonObjectRequest(url, reqeustMethod);
queue.add(what, request, responseListener);
...
// JsonArray
Request<JSONArray> request = NoHttp.createJsonArrayRequest(url, reqeustMethod);
queue.add(what, request, responseListener);
Request<Bitmap> request = NoHttp.createImageRequest(url, requestMethod);
queue.add(what, request, responseListener);
Request<String> request = NoHttp.createStringRequest(url);
...
request.cancel();
Request<String> request = NoHttp.createStringRequest(url);
request.setCancelSign(sign);
...
queue.cancelBySign(sign);
RequestQueue queue = NoHttp.newRequestQueue();
...
queue.stop();
// 在当前线程发起请求,在线程这么使用
Request<String> request = NoHttp.createStringRequest(url);
Response<String> response = NoHttp.startRequestSync(request);
if (response.isSucceed()) {
// 请求成功
} else {
// 请求失败
}
OnResponseListener<String> responseListener = new OnResponseListener<String>() {
@Override
public void onStart(int what) {
// 请求开始时,可以显示一个Dialog
}
@Override
public void onFinish(int what) {
// 请求接受时,关闭Dialog
}
@Override
public void onSucceed(int what, Response<String> response) {
// 接受请求结果
String result = response.get();
// Bitmap imageHead = response.get(); // 如果是bitmap类型,都是同样的用法
}
@Override
public void onFailed(int what, String url, Object tag, CharSequence message) {
// 请求失败或者发生异常
}
};
public class FastJsonRequest extends RestRequestor<JSONObject> {
public FastJsonRequest(String url) {
super(url);
}
public FastJsonRequest(String url, RequestMethod requestMethod) {
super(url, requestMethod);
}
@Override
public JSONObject parseResponse(String url, Headers headers, byte[] responseBody) {
String result = StringRequest.parseResponseString(url, headers, responseBody);
JSONObject jsonObject = null;
if (!TextUtils.isEmpty(result)) {
jsonObject = JSON.parseObject(result);
} else {
// 这里默认的错误可以定义为你们自己的数据格式
jsonObject = JSON.toJSON("{}");
}
return jsonObject;
}
@Override
public String getAccept() {
// 告诉服务器你接受什么类型的数据, 会添加到请求头的Accept中
return "application/json;q=1";
}
}
Request<JSONObject> mRequest = new FastJsonRequest(url, requestMethod);
queue.add(what, mRequest, responseListener);
//下载文件
downloadRequest = NoHttp.createDownloadRequest(url, fielDir, fileName, true, false);
// what 区分下载
// downloadRequest 下载请求对象
// downloadListener 下载监听
CallServer.getDownloadInstance().add(0, downloadRequest, downloadListener);
downloadRequest.cancel();
private DownloadListener downloadListener = new DownloadListener() {
@Override
public void onStart(int what, boolean resume, long preLenght, Headers header, long count) {
}
@Override
public void onProgress(int what, int progress, long downCount) {
}
@Override
public void onFinish(int what, String filePath) {
}
@Override
public void onDownloadError(int what, StatusCode code, CharSequence message) {
}
@Override
public void onCancel(int what) {
}
};
NoHttp 源码及Demo https://github.com/Y0LANDA/NoHttp