Android开发技术AndroidAndroid开发

Android常用开源框架之Volley基础

2015-10-30  本文已影响2811人  食梦兽

关键字: Volley JsonObject JsonArrayRequest StringRequest

Google官方Volley介绍图片
前言:这篇文章也是记录我在慕课网跟随JVR老师学习到有关Volley的知识。关于Volley的记录将分为两部分,分别记录“Volley网络数据请求的使用”和“使用Volley加载、缓存图片”。这篇文章是第一部分。

这里给出有关链接,方便大家访问。
慕课网:http://www.imooc.com/
JVR老师慕课网个人主页:http://www.imooc.com/space/teacher/id/2225574


正文:

Volley的中文翻译为齐射、并发,是Google2013年io大会上发布的网络通讯库。

  1. 通信更快、更简单
  2. GET、POST网络请求及网络图像的高效率异步处理请求
  3. 对请求进行优先级的排序
  4. 网络请求的缓存
  5. 多级别取消请求
  6. 和Activity生命周期的联动
  7. 不太适合进行网络数据的上传和下载

Volley网络数据请求的使用

要使用 Volley,先要在项目中引入Volley库
build.gradle文件中添加Volley库,Android studio会自动下载。

dependencies {
    compile 'com.mcxiaoke.volley:library:1.0.17'
}

1. 使用GET方式请求

//按钮的点击事件
public void click(View view) {   
   // 要访问的URL
   String url="http://m.weather.com.cn/atad/101010100.html";    
   //Volley的请求队列
   RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());    
   //StringRequest实例
   //第一个参数:请求方式GET、POST
   //第二个参数:请求的URL
   //第三个参数:请求成功的监听器,传递了请求结果
   //第四个参数:请求失败的监听器,传递了失败的原因
   StringRequest stringRequest = new StringRequest(Method.GET, 
url,  new Response.Listener<String>() {                
         @Override                
         public void onResponse(String response) {        
            //使用获取的数据更新UI           
            button.setText(response);                }
         }, new Response.ErrorListener() {        
        @Override        
        public void onErrorResponse(VolleyError error) {            
           button.setText(error.toString());        
        }    
   }) };    
  //设置该请求的Tag
  stringRequest.setTag("StringGET");    
  //把该请求添加到requestQueue中
  requestQueue.add(stringRequest);    
  //requestQueue.start();
}

如果使用JsonObjectRequest请求对象,返回的response是JSONObject对象,直接可以解析:

button.setText(response.getJSONObject("weatherinfo").get("city").toString());

JsonArrayRequest请求对象类似。

2. 使用POST方式请求

有两种方法可以post参数。

  1. 通过重写请求对象的getParams()方法,该方法在post请求时,自动调用,获取请求参数。
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Method.POST, 
    url,  new Response.Listener<JSONObject>() {            
      @Override            
      public void onResponse(JSONObject response) {                
      }       
     }, new Response.ErrorListener() {    
    @Override    
    public void onErrorResponse(VolleyError error) {    
    }
}){   
   @Override    
   protected Map<String, String> getParams() throws AuthFailureError {        
      Map<String,String> map = new HashMap<>();        
      map.put("username","liming");        
      map.put("password", "123456");        
      return map;    
  }
};
  1. 如果是JsonObjectRequest还可以使用JsonObjectRequest另一个构造方法实现参数的传递:
public void click(View view) {    
      String url = "http://m.weather.com.cn/atad/101010100.html";    
      RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());    
      //封装请求参数    
      Map<String, String>map = new HashMap<>();    
      map.put("username","liming");    
      map.put("password","123456");    
      JSONObject jsonObject = new JSONObject(map);    
      //参数jsonObject封装了请求参数,Volley会自动提取里面的值,作为post请求参数    
      JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Method.POST,
           url,jsonObject,            
          new Response.Listener<JSONObject>() {                
          @Override                
          public void onResponse(JSONObject response) {    
          //执行请求成功的逻辑            
          }            
     }, new Response.ErrorListener() {        
    @Override        
    public void onErrorResponse(VolleyError error) {      
    //执行请求失败的逻辑       
    }    
});    
   jsonObjectRequest.setTag("jsonObjectGET");    
   requestQueue.add(jsonObjectRequest);    
   //requestQueue.start();}
上一篇下一篇

猜你喜欢

热点阅读