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

来源:互联网 发布:虚拟社交网络的流行 编辑:程序博客网 时间:2024/05/19 20:43

如何在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 0
原创粉丝点击