zoukankan      html  css  js  c++  java
  • Volley网络请求框架的基本用法

    备注: 本笔记是参照了 http://blog.csdn.net/ysh06201418/article/details/46443235  学习之后写下的

    简介:  Volley是google官网退出的一种流行的网络请求框架,封装了Android繁琐的httpclient和HttpUrlConnection,使得我们不必要写更多繁琐的代码就能够很好的实现网络通信,同时AsyncHttpClient和ImageLoader集成于一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

    Volley的用法:

    初始化:

    new 一个RequestQueue实例,然后把一些request添加上去即可

    private RequestQueue mQueue = Volley.newRequestQueue(this);

    1. StringRequest的用法:

     1                 StringRequest request = new StringRequest("http://www.baidu.com", new Response.Listener<String>() {
     2                     @Override
     3                     public void onResponse(String response) {
     4                         requestTextView.setText(response);
     5 
     6                     }
     7                 },new Response.ErrorListener(){
     8                     @Override
     9                     public void onErrorResponse(VolleyError error) {
    10 
    11                     }
    12                 });
    13                 mQueue.add(request);

    这样的话,一个最基本的HTTP发送与响应的功能就完成了。你会发现根本还没写几行代码就轻易实现了这个功能,主要就是进行了以下三步操作:

    1. 创建一个RequestQueue对象。

    2. 创建一个StringRequest对象。

    3. 将StringRequest对象添加到RequestQueue里面。

    上面的是get请求,如果是post请求,那又该怎样实现呢,Volley有自己的实现方法:StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,那么解决方法自然也就有了,我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了,具体如下:

     1         StringRequest request = new StringRequest(Request.Method.POST, "", new Response.Listener<String>() {
     2             @Override
     3             public void onResponse(String response) {
     4 
     5             }
     6         }, new Response.ErrorListener() {
     7 
     8 
     9             @Override
    10             public void onErrorResponse(VolleyError error) {
    11 
    12             }
    13         }) {
    14             @Override
    15             protected Map<String, String> getParams() throws AuthFailureError {
    16                 return super.getParams();
    17             }
    18         };
    19         mQueue.add(request);

    2. JsonRequest的用法

    学完了最基本的StringRequest的用法,我们再来进阶学习一下JsonRequest的用法。类似于StringRequest,JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。

     1         JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("", null, new Response.Listener<JSONObject>() {
     2             @Override
     3             public void onResponse(JSONObject response) {
     4 
     5             }
     6         }, new Response.ErrorListener() {
     7             @Override
     8             public void onErrorResponse(VolleyError error) {
     9 
    10             }
    11         });

    3.ImageRequest的用法

     1                 ImageRequest ir = new ImageRequest("http://www.dpfile.com/s/res/app-touch-icon-152x152.ee6d0c24fc2de0f9a62b6cc9e6720393.png", new Response.Listener<Bitmap>() {
     2                     @Override
     3                     public void onResponse(Bitmap response) {
     4                         // imageView.setImageBitmap(response);
     5                         ImageView iv = new ImageView(VolleyActivity.this);
     6                         //   iv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
     7                         iv.setImageBitmap(response);
     8                         imageLayout.addView(iv);
     9                     }
    10                 }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
    11                     @Override
    12                     public void onErrorResponse(VolleyError error) {
    13 
    14                     }
    15                 });
    16                 mQueue.add(ir);
  • 相关阅读:
    maven 配置
    如何快速在当前目录打开cmd命令提示符
    IntelliJ IDEA手工安python装插件方法
    Ubuntu14.04安装build-essential失败,包依赖问题如何解决?
    Xshell的telnet简化登录
    spring注入简记
    eclipse 技巧
    Linq 等式运算符:SequenceEqual(转载)
    一个可定制的图标网站
    EF 批量增删改 EntityFramework.Extensions
  • 原文地址:https://www.cnblogs.com/Isaber-blogs/p/5670588.html
Copyright © 2011-2022 走看看