一起Talk Android吧(第三百三十六回: Android中的volley一)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百三十六回: Android中的volley一)相关的知识,希望对你有一定的参考价值。
各位看官们,大家好,上一回中咱们说的是android中HTTP请求的例子,这一回中咱们说的例子是Android中的volley
。闲话休提,言归正转。让我们一起Talk Android吧!
什么是Volley
看官们,我们在前面章回中介绍了HTTP的两种请求GET和POST,本章回中将介绍Volley
。首先我们看看Volley是什么,它是Android中自带的HTTP库,它把HTTP中各种请求和响应操作封装成接口,我们通过这些接口就可以更加方便地完成HTTP中各种发送和响应操作。
Volley的优缺点
回想一下我们使用Java接口(HttpURLConnection)操作HTTP时除去正常的HTTP操作外,还需要处理线程、IO流,而使用Volley库就不需要做这些额外的工作了,因为它已经帮我们处理好这些额外工作了。除此之外,它具备以下特点(摘自官方文档):
- 自动网络请求调度。
- 多个并发网络连接。
- 透明磁盘和具有标准 HTTP 缓存一致性的内存响应缓存。
- 支持请求优先级。
- 取消请求 API。您可以取消单个请求,也可以设置要取消的请求的时间段或范围。
- 可轻松自定义,例如自定义重试和退避时间。
- 强大的排序功能,让您可以轻松使用从网络异步提取的数据正确填充界面。
- 调试和跟踪工具。
人非圣贤,孰能无过,Volley也有一些缺点:
- 不支持同步请求操作;
- 请求数量过大时性能较低;
- 对于图片加载性能较低;
如何使用Volley
在实际项目中,我可以避开它的缺点,充分利用它的优点来实现HTTP操作,下面是具体的使用步骤:
- 1.创建请求队列
- 2.创建请求对象,并且重写其中的回调方法
- 3.在回调方法中可以获取到服务器对请求的响应结果
- 4.把请求对象添加到请求队列中,Volley会自动发起请求
- 5.取消请求,清空请求队列
private void initSingleVolleyRequest()
mRequestQueue = Volley.newRequestQueue(this);
mStringRequest = new StringRequest(Request.Method.GET, HTTP_URL, new Response.Listener<String>()
@Override
public void onResponse(String response)
Log.d(TAG, "onResponse: result: " + response);
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Log.d(TAG, "onErrorResponse: Error: "+error.toString());
);
private void initMultiVolleyRequest()
//init cache,and size of cache is 1MB
Cache cache = new DiskBasedCache(getCacheDir(),1024*1024);
Network network = new BasicNetwork(new HurlStack());
mRequestQueue = new RequestQueue(cache,network);
mRequestQueue.start();
mStringRequest = new StringRequest(Request.Method.GET, HTTP_URL, new Response.Listener<String>()
@Override
public void onResponse(String response)
Log.d(TAG, "onResponse: result: " + response);
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Log.d(TAG, "onErrorResponse: Error: "+error.toString());
);
private void sendVolleyRequest()
if(mRequestQueue != null && mStringRequest != null)
mRequestQueue.add(mStringRequest);
btVolley = (Button)findViewById(R.id.id_bt_Volley);
btVolley.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
sendVolleyRequest();
);
if(mRequestQueue != null)
mRequestQueue.cancelAll(new Object());
上面的程序只有主要功能的代码,其它代码省略了,此外,页面布局中只有一个Button,与布局相关的代码大家可以自已补充,我们在这里就不列出了。建议大家自己动手运行程序,通过程序的运行结果查看网站对HTTP请求的响应。关于上面的代码还有以下注意事项:
- 1.在manifest文件中添加网络权限,不然会运行程序会发生异常;
- 2.在build.gradle文件添加依赖:implementation ‘com.android.volley:volley:1.2.1’
- 3.发起请求可以在主线程中运行,不需要像Java接口一样单独启动一个子线程;
- 4.代码中可以发起多个请求和单个请求,这二者的不同之处在于创建请求队列时是的构造方法;
- 5.程序中发起的是GET类型的HTTP请求,发起其它类型HTTP请求的方法与此类似,这里不再详细介绍;
看官们,关于Android中Volley的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第三百三十六回: Android中的volley一)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第三百三十九回: Android中的OkHttp二)
一起Talk Android吧(第三百四十六回:解析JSON数组一)
一起Talk Android吧(第三百三十回:Android中网络通信之UPD通信演示)
一起Talk Android吧(第三百八十六回:ViewModel)