1. Volley简介

我们平时在开发Android应用的时候都需要用到网络技术,而多数情况下都会使用Android系统中自带的网络加载HttpURLConnection   和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高,特别是HttpURLConnection。

不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,Volley等等。

Volley是Google公司在2013年 I/O大会上推出了一个新的网络通信框架。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

2.Volley的用法

首先需要去 github


android volley获取图片 android volley使用_网络

                      

android volley获取图片 android volley使用_android_02


StringRequest的用法




首先需要获取到一个RequestQueue对象,可以调用如下方法获取到



代码如下

package com.example.openproject.app;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

import android.app.Application;
import android.content.Context;

public class MyApplication extends Application{
	
	public static <span style="background-color: rgb(255, 0, 0);">RequestQueue</span> queue;//请求队列对象
	
	public static RequestQueue getRequestQueue(Context context){
		
		if(queue==null){
			queue=Volley.newRequestQueue(context);
		}
		
		return queue;
	
	}
	
}

注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。


由于我们要多次联网请求数据,为了省事,所以我把 StringRequest给封装成了一个工具类


package com.example.openproject.utils;

import java.util.HashMap;
import java.util.Map;

import android.content.Context;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.example.openproject.app.MyApplication;
import com.example.openproject.bean.Volley_Huidiao;

public class MyVolley {
	
	//get请求
	public static void getVolley(String path,final Volley_Huidiao huidiao,Context context){
		
		
		StringRequest request = new StringRequest(Request.Method.GET,path, new Response.Listener<String>() {

			@Override//联网成功
			public void onResponse(String response) {
				
				huidiao.getData(response);
				
				
			}
		},new Response.ErrorListener() {
			
			//联网失败

			@Override
			public void onErrorResponse(VolleyError error) {
				
			}
		});
		request.setTag("get");
		MyApplication.getRequestQueue(context).add(request);
		
		
		
	}
	
	//post请求
	public static void postVolley(String path,final Volley_Huidiao huidiao,Context context,final HashMap<String, String> myMap){
		
		StringRequest stringRequest = new StringRequest(Request.Method.POST, path, new Response.Listener<String>() {

			@Override
			public void onResponse(String response) {
				//联网成功
				huidiao.getData(response);
				
			}
		}, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				//联网失败
				
			}
			
		}){
			@Override
			protected Map<String, String> getParams() throws AuthFailureError {
				// TODO Auto-generated method stub
				return myMap;
			}
			
			
		};
		
		stringRequest.setTag("post");
		MyApplication.getRequestQueue(context).add(stringRequest);
		
		
		
		
		
		
		
	}
	
	
	
	

}



</pre><p></p><pre>

给设置一个接口类  Volley_Huidiao


package com.example.openproject.bean;

public interface Volley_Huidiao {
	
	void getData(String data);

}



在MainActivity中调用


MyVolley.getVolley(str, new Volley_Huidiao() {  //  str代表网址  Volley_Huidiao 是你写的接口
			
			@Override
			public void getData(String data) {
			
				
			//data 就是你需要解析的json字符串	
				
			}
		}, 上下文);



另外,由于Volley是要访问网络的,因此不要忘记在你的AndroidManifest.xml中添加如下权限:


<uses-permission android:name="android.permission.INTERNET" />


以上就是StringRequest的用法