android之Volley框架的使用(1)

1.volley的get和post请求数据方式的使用

     StringRequest(对返回数据类型不确定的情况下)包含后两种

     JsonObjectRequest

     JsonArrayRequest

     回调使用,,成功,失败

  Get方式获取数据

   StringRequest request = new StringRequest(Method.GET, url, new Listener<String>() {
           public void onResponse(String response) {   //数据请求成功返回到这个里面
                  //对response解析即可			
	}
	   }, new Response.ErrorListener() {

			
	   public void onErrorResponse(VolleyError error) {   //数据 请求失败返回到这个里面
				}
	   });
	request.setTag("successGet");
	MyApplication.getHttpQueues().add(request);
      后面两个和这个是差不多的

 Post请求获取数据    

  StringRequest

  StringRequest request = new StringRequest(Method.POST, url, new Listener<String>() {

			@Override
			public void onResponse(String response) {   //数据请求成功返回到这个里面
				// TODO Auto-generated method stub
				
			}
		}, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {   //数据 请求失败返回到这个里面
				// TODO Auto-generated method stub
				
			}
		}){
		protected Map<String, String> getParams() throws AuthFailureError {//post和get不一样的地方
			// TODO Auto-generated method stub
			
			Map<String,String> hashMap = new HashMap<String,String>();
			hashMap.put("phone", "15671654057");
			hashMap.put("key", "**");
			return hashMap;
		}};
		request.setTag("successPost");
		MyApplication.getHttpQueues().add(request);
  JsonObjectRequest

   

		HashMap<String,String>map = new HashMap<String,String>();
		map.put("phone", "15671654057");
                map.put("key", "**");             //这里的key我是用的聚合
		JSONObject object = new JSONObject(map);
		JsonObjectRequest objectRequest = new JsonObjectRequest(Method.POST, url, object , new Listener<JSONObject>() {

			@Override
			public void onResponse(JSONObject response) {
				// TODO Auto-generated method stub
				
			}}, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				// TODO Auto-generated method stub
				
			}
		});
		objectRequest.setTag("successPost");
		MyApplication.getHttpQueues().add(objectRequest);
		


2.volley的网络请求队列建立和取消队列请求

     建立全局请求队列

     

public class MyApplication extends Application {

	public static RequestQueue queues;
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		queues = Volley.newRequestQueue(getApplicationContext());
		
	}
	public static RequestQueue getHttpQueues()  //获取请求队列
	{
		return queues;
	}
}


3.volley与activity生命周期的联动

    activity销毁,同时关闭请求

   设置tag标签,onStop()丽执行取消请求

    

protected void onStop() {
    	// TODO Auto-generated method stub
    	super.onStop();
    	MyApplication.getHttpQueues().cancelAll("successGet");   //与Activity生命周期绑定
    }

4.volley的简单的二次回调封装

   使用自己定义的,使用一个全局可控的

   

public abstract class VolleyInterface {

	public Context context;
	public static Listener<String> mListener;
        public static ErrorListener mErrorListener;
	public VolleyInterface(Context context , Listener<String> listener,
			ErrorListener errorListener) {
		// TODO Auto-generated constructor stub
		
		this.context = context;
		this.mListener = listener;
		this.mErrorListener = errorListener;
	}
	
	
	public abstract void onMySuccess(String result);
	public abstract void onMyError(VolleyError error);
	public Listener<String> loadingListener()
	{
		mListener = new Listener<String>() {

			@Override
			public void onResponse(String response) {
				// TODO Auto-generated method stub
				onMySuccess(response);
			}
		};
		return mListener;
	}
	
	public ErrorListener errorListener()
	{
		mErrorListener = new ErrorListener()
		{

			@Override
			public void onErrorResponse(VolleyError error) {
				// TODO Auto-generated method stub
				onMyError(error);
			}
			
		};
		return mErrorListener;
	}
}

  



  public class VolleyRequest {

	public static StringRequest stringRequest;
	public static Context context;
	public static void RequestGet(Context mContext,String url,String tag,
			VolleyInterface vif) //vif,请求回调接口
	{
		MyApplication.getHttpQueues().cancelAll(tag);//防止进行重复请求
		stringRequest = new StringRequest(Method.GET, url, vif.loadingListener() , vif.errorListener() );
		stringRequest.setTag(tag);
		MyApplication.getHttpQueues().add(stringRequest);
		MyApplication.getHttpQueues().start();
	}
	public static void RequestPost(Context context , String url ,String tag ,final Map<String,String> params,VolleyInterface vif)
	{
		MyApplication.getHttpQueues().cancelAll(tag);
		stringRequest = new StringRequest(url, vif.loadingListener(), vif.errorListener())
		{
			@Override
			protected Map<String, String> getParams() throws AuthFailureError {
				// TODO Auto-generated method stub
				return params;
			}
		};
	}
}
主activity里面就可以用我们自定义的了

VolleyRequest.RequestGet(this, url, "successGet", new VolleyInterface(this,VolleyInterface.mListener,VolleyInterface.mErrorListener) {
			
			@Override
			public void onMySuccess(String result) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onMyError(VolleyError error) {
				// TODO Auto-generated method stub
				
			}
		});
5.volley加载网络图片和监听

    LruCache                         

    ImageLoader                 

    NetworkImageView   

    


   最简单的

        ImageRequest request = new ImageRequest(url, new Listener<Bitmap>() {

			@Override
			public void onResponse(Bitmap response) {
				// TODO Auto-generated method stub
				iv_img.setImageBitmap(response);
			}
		}, 0, 0,//图片大小,00为默认的 Config.RGB_565//图片格式, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				// TODO Auto-generated method stub
				
			}
		});
        MyApplication.getHttpQueues().add(request);
  另外一种,带缓冲机制

    

public class BitmapCache implements ImageCache {

	public LruCache<String,Bitmap> cache;
	public int max = 10*1024*1024;    //最大缓冲内存大小,超过启动自动回收
	public BitmapCache()
	{
		cache = new LruCache<String,Bitmap>(max)
	        {
			 protected int sizeOf(String key, Bitmap value) {
			       return value.getRowBytes()*value.getHeight();//
			 }
		};
	}
	
	@Override
	public Bitmap getBitmap(String url) {
		// TODO Auto-generated method stub
		return cache.get(url);
	}

	@Override
	public void putBitmap(String url, Bitmap bitmap) {
		// TODO Auto-generated method stub
               cache.put(url, bitmap);
	}

}


主activity中


 ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache());
 ImageListener listener = ImageLoader.getImageListener(iv_img, R.drawable.ic_launcher, R.drawable.ic_launcher);//有一个图片是加载错误时显示
 loader.get(url, listener);
</pre><pre name="code" class="html">



   是用volley自己的控件显示图片
   
<com.android.volley.toolbox.NetworkImageView
         android:id="@+id/imag"
         android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_marginLeft="63dp"
        android:layout_toRightOf="@+id/textView1"
        
         ></com.android.volley.toolbox.NetworkImageView>
   

主activity中

        netImageView = (NetworkImageView) findViewById(R.id.imag);
        ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache());
        
        netImageView.setDefaultImageResId(R.drawable.ic_launcher);//默认显示
        netImageView.setErrorImageResId(R.drawable.ic_launcher);  //加载错误显示
        netImageView.setImageUrl(url, loader);                    //加载网络图片
        
        
        



    

    

原文地址:https://www.cnblogs.com/peterleee/p/9373781.html