一起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)

一起Talk Android吧(第三百二十六回:Android中的布局编辑器)

一起Talk Android吧(第三百七十六回:如何使用TabLayout)