Volley使用小结

因为现在的项目中一直是使用soap访问webservice,感觉没有直接post请求爽,所以研究了post访问webservice,之后有研究了volley框架,所以记下来。

activity里声明   private RequestQueue mRequestQueue=Volley.newRequestQueue(this);

1、stringRequest请求,返回值是String类型,感觉这一个基本就能实现一般的post请求了,因为我们自己知道返回值是JSONObject或者JSONArray的,拿到String返回值后自己转换就行了。

public void stringRequest(String url){
        StringRequest sq=new StringRequest(Request.Method.POST,url,new Response.Listener<String>(){
        
            @Override
            public void onResponse(String response) {
                Log.i("response", response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError arg0) {
                
            }
        }){

            //这个地方是post时,参数设置的地方
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> map=new HashMap<String,String>();
                map.put("id","45");
                return map;
            }
        };
        mRequestQueue.add(sq);
    }

2、JsonObjectRequest请求,返回值JsonObject。
    /**
     * JsonObjectRequest
     * @param url
     */
    public void jsonObjectRequest(String url){        
    //第三个参数为JSONObject jsonRequest
        JsonObjectRequest jr = new JsonObjectRequest(Request.Method.POST,url,null,new Response.Listener<JSONObject>() {  
            @Override  
            public void onResponse(JSONObject response) {
                try {
                    info.setText(response.getString("human_account"));
                    pr.setVisibility(View.INVISIBLE);
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        },new Response.ErrorListener() {
            @Override  
            public void onErrorResponse(VolleyError error) {

            }
        });
        mRequestQueue.add(jr);
    }


3、jsonArrayRequest请求,返回值jsonArray。

    public  void jsonArrayRequest(String url){
        JsonArrayRequest jr = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray arg0) {
                
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError arg0) {
                
            }
        });  
        mRequestQueue.add(jr);  
    }


4、NetworkImageView,这是volley提供的网络图片加载控件

在工具类里面写如下代码:

public static void setImageURL(Context context,String url,NetworkImageView image){
        mRequestQueue= Volley.newRequestQueue(context);
        LruImageCache lruImageCache = LruImageCache.instance();    

       //ImageLoader是volley自己的类
        ImageLoader imageLoader = new ImageLoader(mRequestQueue,lruImageCache);            

        //设置默认图片
        image.setDefaultImageResId(R.drawable.ic_launcher);

        //设置加载出错时显示的图片
        image.setErrorImageResId(R.drawable.ic_launcher);

        //url是网络地址
        image.setImageUrl(url,imageLoader);    
    }

然后LruImageCache需要自己写,LRU是Least Recently Used 近期最少使用算法:

    public class LruImageCache implements ImageCache{
        private static LruCache<String, Bitmap> mMemoryCache;
        private static LruImageCache lruImageCache;
        
        private LruImageCache(){
            // Get the Max available memory
            int maxMemory = (int) Runtime.getRuntime().maxMemory();
            int cacheSize = maxMemory / 8;
            mMemoryCache = new LruCache<String, Bitmap>(cacheSize){
                @Override
                protected int sizeOf(String key, Bitmap bitmap){
                    return bitmap.getRowBytes() * bitmap.getHeight();
                }
            };        
        }
        
        public static LruImageCache instance(){
            if(lruImageCache == null){
                lruImageCache = new LruImageCache();
            }
            return lruImageCache;
        }
        
        @Override
        public Bitmap getBitmap(String arg0) {        
            return mMemoryCache.get(arg0);    
        }

        @Override
        public void putBitmap(String arg0, Bitmap arg1) {
            if(getBitmap(arg0) == null){
                mMemoryCache.put(arg0, arg1);
            }        
        }
}

5、activity结束时,取消未完成的网络请求,重写onStop方法

    @Override
    protected void onStop() {
        //有针对的取消操作
        //...不会写
        
        //取消全部未完成的请求
        mRequestQueue.cancelAll(this);
        super.onStop();
    }



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值