目录

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来区分是哪个请求的回调结果,你可以理解为它的作用和handlerwhat一样的作用,就是用来区分信号来源的。

这样做的好处是不像其它框架一样,每个请求都new listener()来接受结果,这样及省了代码量,又让代码更加整洁。

当然如果你不想这么用,那么你可以每个请求都new listener()

对于队列使用的建议

创建一个队列应该多次使用,因为每创建一个队列,就会创建指定并发值个线程,如果创建太多队列就会耗资源,所以我们要把队列封装成单例模式,强烈建议你请看这篇文档:队列特性讲解

推荐阅读
队列的详解和封装
同步请求