0x1、引言
Volley跟AsyncTask一样,都是老古董了,最早发布于2013年的Google I/O大会,初衷就是:让Android开发者少写重复的请求代码。
怎么说?早期网络请求都是用 HttpURLConnection 或者 HttpClient,直接用非常麻烦,比如一段请求百度的代码:
private void sendRequest() { //开线程发起网络请求 new Thread(new Runnable() { @Override public void run() { HttpURLConnection conn = null; BufferedReader reader = null; try { //获取HttpRULConnection实例 URL url = new URL("https://www.baidu.com"); conn = (HttpURLConnection) url.openConnection(); //设置请求方法和自由定制 conn.setRequestMethod("GET"); conn.setConnectTimeout(8000); conn.setReadTimeout(8000); //获取响应码和返回的输入流 int i = conn.getResponseCode(); InputStream in = conn.getInputStream(); //对输入流进行读取 reader = new BufferedReader(new InputStreamReader(in)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } showResponse(response.toString()); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (connection != null) { connection.disconnect(); } } } }).start(); } // 请求结果展示 private void showResponse( final String response) { runOnUiThread(new Runnable() { @Override public void run() { //进行UI操作 xxx.setText(response); } }); }
每个请求都是写上这样一串又长又臭的玩意,写的人死了,看的人也死了,所以一般要封装下。
封装得好也不简单,得去考虑并发,请求取消等等。而Volley所做的事情也是封装,将复杂通信细节封装在内部,开发者仅需写少量代码,即可完成网络请求。
Github仓库,Google竟然还有在维护这个库,而且有API文档 《Volley 概览》,文档中介绍了它的一些优势:
网络异常,图片无法展示
|
使用方法很简单,先在build.gradle中添加依赖:
implementation 'com.android.volley:volley:1.1.1'
然后写段简单的请求示例(官方示例有Kotlin版~)
// 创建请求队列 RequestQueue mQueue = Volley.newRequestQueue(context); // 构造请求 StringRequest stringRequest = new StringRequest("http://www.baidu.com", new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d("TAG", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }); // 将请求加入队列 mQueue.add(stringRequest);
相比起上面直接粗暴的写法,代码赏心悦目了不少,文档中还给出了一张Volley中请求的处理流程图:
网络异常,图片无法展示
|
让我们大概知道,Volley中的请求,还支持缓存,命中缓存直接读缓存里的数据,不用再去请求后台。
实际业务开发中,都是OkHttp的天下了,Volley基本绝迹了,也不推荐在项目里用。但其设计思想是可以借鉴的,代码虽简五脏俱全,了解它对后续其他框架的学习也有所裨益,故本节花上亿点点时间来对他进行 拆解
。