Android Volley的基本用法

来源:互联网 发布:java sftp下载文件 编辑:程序博客网 时间:2024/04/28 17:37

主要是参照


http://blog.csdn.net/guolin_blog/article/details/17482095

和http://codekk.com/open-source-project-analysis/detail/Android/grumoon/Volley%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90学习的。

关于Volley的安装可以参看http://blog.csdn.net/gulumi_mmga/article/details/46301461

以下总结了StringRequest,JsonRequest,ImageRequest,ImageLoader和NetworkImageView的用法

1. StringRequest的用法

  1. 创建一个RequestQueue对象。

  2. 创建一个StringRequest对象。

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

//        获取到一个RequestQueue对象        RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);//        创建一个StringRequest对象.需要传入三个参数,//        第一个参数就是目标服务器的URL地址,//        第二个参数是服务器响应成功的回调,//        第三个参数是服务器响应失败的回调。        StringRequest stringRequest = new StringRequest("http://www.baidu.com",                new Response.Listener<String>() {                    @Override                    public void onResponse(String response) {                        Log.d(">>>>>>>>>", response);                    }                }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                Log.e(">>>>>>>>>>", error.getMessage(), error);            }        });//        将这个StringRequest对象添加到RequestQueue里面        mQueue.add(stringRequest);    }

如果想要发出一条POST请求应该怎么做呢?StringRequest中还提供了另外一种四个参数的构造函数,其中第一个参数就是指定请求类型的,我们可以使用如下方式进行指定:

StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener);

可是这只是指定了HTTP请求方式是POST,那么我们要提交给服务器的参数又该怎么设置呢?很遗憾,StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,那么解决方法自然也就有了,我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了,代码如下所示:

StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener) {      @Override      protected Map<String, String> getParams() throws AuthFailureError {          Map<String, String> map = new HashMap<String, String>();          map.put("params1", "value1");          map.put("params2", "value2");          return map;      }  };  

2. JsonRequest的用法

和StringRequest用法基本没有区别

RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null,                new Response.Listener<JSONObject>() {                    @Override                    public void onResponse(JSONObject response) {                        Log.d(">>>>>>>>>>>>>>>", response.toString());                    }                }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                Log.e(">>>>>>>>>>>", error.getMessage(), error);            }        });        mQueue.add(jsonObjectRequest);

这里我们填写的URL地址是http://m.weather.com.cn/data/101010100.html,这是中国天气网提供的一个查询天气信息的接口,响应的数据就是以JSON格式返回的,然后我们在onResponse()方法中将返回的数据打印出来。
这样当HTTP通信完成之后,服务器响应的天气信息就会回调到onResponse()方法中,并打印出来。现在运行一下程序,发出这样一条HTTP请求,就会看到LogCat中会打印出如下图所示的数据。
这里写图片描述
由此可以看出,服务器返回给我们的数据确实是JSON格式的,并且onResponse()方法中携带的参数也正是一个JSONObject对象,之后只需要从JSONObject对象取出我们想要得到的那部分数据就可以了。

3. ImageRequest的用法

    RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);//        第一个参数就是图片的URL地址//        第二个参数是图片请求成功的回调,这里我们把返回的Bitmap参数设置到ImageView中//        第三第四个参数分别用于指定允许图片最大的宽度和高度,0为不限制//        第五个参数用于指定图片的颜色属性,其中ARGB_8888可以展示最好的颜色属性每个图片像素占据4个字节的大小,//              RGB_565则表示每个图片像素占据2个字节大小//        第六个参数是图片请求失败的回调        ImageRequest imageRequest = new ImageRequest("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",        new Response.Listener<Bitmap>() {            @Override            public void onResponse(Bitmap response) {                imageView.setImageBitmap(response);            }        },0,0, Bitmap.Config.RGB_565,                new Response.ErrorListener() {                    @Override                    public void onErrorResponse(VolleyError error) {                        Toast.makeText(MainActivity.this, "读取错误", Toast.LENGTH_SHORT).show();                    }                });        mQueue.add(imageRequest);    }

4. ImageLoader的用法
ImageLoader也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的,不过ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。

1. 创建一个RequestQueue对象。2. 创建一个ImageLoader对象。3. 获取一个ImageListener对象。4. 调用ImageLoader的get()方法加载网络上的图片。

先新建一个BitmapCache类并实现ImageCache接口

public class BitmapCache implements ImageLoader.ImageCache {    private LruCache<String, Bitmap> mCache;    public BitmapCache() {        int maxSize = 10 * 1024 * 1024;        mCache = new LruCache<String, Bitmap>(maxSize){            @Override            protected int sizeOf(String key, Bitmap bitmap) {                return bitmap.getRowBytes() * bitmap.getHeight();            }        };    }    @Override    public Bitmap getBitmap(String url) {        return mCache.get(url);    }    @Override    public void putBitmap(String url, Bitmap bitmap) {        mCache.put(url, bitmap);    }}
        RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);//        第一个参数就是RequestQueue对象,第二个参数是一个ImageCache对象        ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache()        );        ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView,                R.drawable.abc_btn_default_mtrl_shape, R.drawable.abc_btn_check_material);        imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", listener,200,200);

5. NetworkImageView的用法

  1. 创建一个RequestQueue对象。

  2. 创建一个ImageLoader对象。

  3. 在布局文件中添加一个NetworkImageView控件。

  4. 在代码中获取该控件的实例。

  5. 设置要加载的图片地址。

第一第二步和ImageLoader的用法是完全一样的,因此这里我们就从第三步开始学习了。首先修改布局文件中的代码,在里面加入NetworkImageView控件,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >      <Button          android:id="@+id/button"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Send Request" />      <com.android.volley.toolbox.NetworkImageView           android:id="@+id/network_image_view"          android:layout_width="200dp"          android:layout_height="200dp"          android:layout_gravity="center_horizontal"          />  </LinearLayout>  

接着在Activity获取到这个控件的实例

networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);  

得到了NetworkImageView控件的实例之后,我们可以调用它的setDefaultImageResId()方法、setErrorImageResId()方法和setImageUrl()方法来分别设置加载中显示的图片,加载失败时显示的图片,以及目标图片的URL地址,如下所示:

networkImageView.setDefaultImageResId(R.drawable.default_image);  networkImageView.setErrorImageResId(R.drawable.failed_image);  networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",  imageLoader);  
0 0
原创粉丝点击