如何在Android开发中高效使用Volley网络框架

如何在Android开发中高效使用Volley网络框架

什么是Volley

Volley是Google在2013年推出的一个网络框架,他适合做短小的数据拉取和图像拉取与填充

准备

如果使用Android Studio作为开发环境
1. 下载Volley.jar
2. 将Volley.jar放在工程目录的libs文件夹中
3. 配置Gradle,代码如下:

denpendencies{
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('libs/volley.jar')
}

使用

在整个Volley框架中,有一个叫做RequestQueue的东西会负责请求的发送等等,google官方认为一个APP只需一个Queue就行。
所以我一般会把Queue的引用写在Application类里面,以供全局使用。
获取RequestQueue的代码:

RequestQueue = Volley.newRequestQueue(mContext);

有了Queue之后我们就把重心放到Request上面。
Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。
1. JsonObjectRequest:返回JSON对象。
2. JsonArrayRequest:返回JsonArray。
3. StringRequest:返回String,这样可以自己处理数据,更加灵活,另外可以继承Request自定义Request。

Volley支持http的GET、POST、PUT、DELETE等方法。

使用GET request的方法:

String url="http://www.baidu.com";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() {  
            @Override  
            public void onResponse(JSONObject response) {  
                //在这里处理正确返回的数据
                Log.i("TAG",response.toString());

            }  
        },new Response.ErrorListener() {  
            @Override  
            public void onErrorResponse(VolleyError error) {  
                //在这里处理错误的返回数据
            }  
        });  
        mRequestQueue.add(request);
        mRequestQueue.start();  

使用POST request的方法:

url = "http://httpbin.org/post";
StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
    new Response.Listener<String>() 
    {
        @Override
        public void onResponse(String response) {
            // response
            Log.d("Response", response);
        }
    }, 
    new Response.ErrorListener() 
    {
         @Override
         public void onErrorResponse(VolleyError error) {
             // error
             Log.d("Error.Response", response);
       }
    }
) {     
    @Override
    protected Map<String, String> getParams() 
    {  
            Map<String, String>  params = new HashMap<String, String>();  
            params.put("name", "Alif");  
            params.put("domain", "http://itsalif.info");

            return params;  
    }
};
queue.add(postRequest);

使用PUT request的方法

url = "http://httpbin.org/put";
StringRequest putRequest = new StringRequest(Request.Method.PUT, url, 
    new Response.Listener<String>() 
    {
        @Override
        public void onResponse(String response) {
            // response
            Log.d("Response", response);
        }
    }, 
    new Response.ErrorListener() 
    {
         @Override
         public void onErrorResponse(VolleyError error) {
                         // error
             Log.d("Error.Response", response);
       }
    }
) {

    @Override
    protected Map<String, String> getParams() 
    {  
            Map<String, String>  params = new HashMap<String, String> ();  
            params.put("name", "Alif");  
            params.put("domain", "http://itsalif.info");

            return params;  
    }

};

queue.add(putRequest);

使用DELTE request的方法:

url = "http://httpbin.org/delete";
StringRequest dr = new StringRequest(Request.Method.DELETE, url, 
    new Response.Listener<String>() 
    {
        @Override
        public void onResponse(String response) {
            // response
            Toast.makeText($this, response, Toast.LENGTH_LONG).show();
        }
    }, 
    new Response.ErrorListener() 
    {
         @Override
         public void onErrorResponse(VolleyError error) {
             // error.

       }
    }
);
queue.add(dr);

建议在onStop()中取消对列里面的请求:

@Override  
protected void onStop() {  
    super.onStop();  
    mRequestQueue.cancelAll(this);  
}  

以上是关于数据获取的一些代码,接下来我们看看好用的 NetworkImageView
在布局中添加一个NetwokekImageView
在java代码中获取这个view,然后使用它的

setImageUrl(String Url,,ImageLoader imageLoader)

为图像设置一个url和一个imageLoader,图片便会下载。
那么这里的imageLoader是什么?

RequestQueue mRequestQueue = Volley.newRequestQueue(this);  
final LruCache<String, Bitmap> mImageCache = new LruCache<String, Bitmap>(  
                20);  
        ImageCache imageCache = new ImageCache() {  
            @Override  
            public void putBitmap(String key, Bitmap value) {  
                mImageCache.put(key, value);  
            }  

            @Override  
            public Bitmap getBitmap(String key) {  
                return mImageCache.get(key);  
            }  
        };  
ImageLoader mImageLoader = new ImageLoader(mRequestQueue, imageCache); 

如上便是一个ImageLoader,他负责加载和缓存image。
volley还有很多有用的功能,欢迎探索。

尾声

在实际项目中,我会把volley为Model层的重要功能,在Model接受到来着P层的url请求后,在model层生成request然后装填到queue并在返回方法里,用FastJson进行Json数据解析将json数据解析为bean,并将解析后到bean通过listener回调给p层进行数据到视图到填充。

参考文章:
网络通信框架Volley使用详细说明
Android Volley Tutorial – Making HTTP GET, POST, PUT
学疏才浅,请指教。
---Taylor

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值