异步请求

最后更新于:2022-04-01 23:20:15

# 目录 [TOC] NoHttp的核心还是同步请求,本章要讲的异步请求也是基于[同步请求](http://doc.nohttp.net/222861)的。 NoHttp的异步请求是在同步请求的基础上用`任务队列` + `Handler`实现的,如果你想更好的理解NoHttp,更好的使用队列的特性,[强烈建议看这里](http://doc.nohttp.net/222881)。 # 异步请求的步骤 1、创建队列([队列特性讲解点我](http://doc.nohttp.net/222881)) ```java RequestQueue queue = NoHttp.newRequestQueue(); ``` 2、创建请求 ```java Request request = new StringRequest(url); // 添加url?key=value形式的参数 request.add("enName", "yanzhenjie"); request.add("zhName", "严振杰"); request.add("website", "http://www.yanzhenjie.com"); ``` 3、添加请求到队列 ```java ... queue.add(0, request, new OnResponseListener(){ @Override public void onSucceed(int what, Response response) { if(response.responseCode() == 200) {// 请求成功。 String result = response.get(); } } @Override public void onFailed(int what, Response 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()`。 # 对于队列使用的建议 创建一个队列应该多次使用,因为每创建一个队列,就会创建指定`并发值`个线程,如果创建太多队列就会耗资源,所以我们要把队列封装成单例模式,强烈建议你请看这篇文档:[队列特性讲解](http://doc.nohttp.net/222881)。 **推荐阅读** [队列的详解和封装](http://doc.nohttp.net/222881) [同步请求](http://doc.nohttp.net/222861)
';