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

Posted TaylorHere

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在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

以上是关于如何在Android开发中高效使用Volley网络框架的主要内容,如果未能解决你的问题,请参考以下文章

Volley框架

Android应用开发:网络工具——Volley

Android应用开发:网络工具——Volley

Android应用开发:网络工具——Volley

Android Volley框架的使用

android开发学习 ------- volley网络请求的实例