目录
NoHttp的核心还是同步请求,本章要讲的异步请求也是基于同步请求的。
NoHttp的异步请求是在同步请求的基础上用任务队列
+ Handler
实现的,如果你想更好的理解NoHttp,更好的使用队列的特性,强烈建议看这里。
异步请求的步骤
1、创建队列(队列特性讲解点我)
RequestQueue queue = NoHttp.newRequestQueue();
2、创建请求
Request<String> request = new StringRequest(url);
// 添加url?key=value形式的参数
request.add("enName", "yanzhenjie");
request.add("zhName", "严振杰");
request.add("website", "http://www.yanzhenjie.com");
3、添加请求到队列
...
queue.add(0, request, new OnResponseListener<String>(){
@Override
public void onSucceed(int what, Response<String> response) {
if(response.responseCode() == 200) {// 请求成功。
String result = response.get();
}
}
@Override
public void onFailed(int what, Response<String> response) {
Excepition exception = response.getException();
if(exception instanceof NetworkError) {// 网络不好。
}
// 这里还有很多错误类型,可以看demo:
https://github.com/yanzhenjie/NoHttp
...
}
@Override
public void onStart(int what) {
// 这里可以show()一个wait dialog。
}
@Override
public void onFinish(int what) {
// 这里可以dismiss()上面show()的wait dialog。
}
});
这里对其中queue.add(what, request, listener)
中的what
做个说明,任意添加多个请求到队列时,使用同一个Listener接受结果,listener的任何一个方法被回调时都会返回在添加请求到队列时写的相应what值,可以用这个what来区分是哪个请求的回调结果,你可以理解为它的作用和handler
的what
一样的作用,就是用来区分信号来源的。
这样做的好处是不像其它框架一样,每个请求都new listener()
来接受结果,这样及省了代码量,又让代码更加整洁。
当然如果你不想这么用,那么你可以每个请求都new listener()
。
对于队列使用的建议
创建一个队列应该多次使用,因为每创建一个队列,就会创建指定并发值
个线程,如果创建太多队列就会耗资源,所以我们要把队列封装成单例模式,强烈建议你请看这篇文档:队列特性讲解。