美文网首页
Android-Volley的基本用法

Android-Volley的基本用法

作者: Jeffrey599 | 来源:发表于2018-05-23 21:20 被阅读0次

    关于volley的介绍不说了,直接讨论一下volley的几种用法。

    1.将volley的库导入到自己的工程。(记得开启工程的网络权限)

    image

    2.初始化请求池。

    在application实例一个RequestQueue单例,并提供一个get方法来获取。


    image

    3.网络请求

    有三种常见请求类型:StringRequest、ImageRequest、JsonRequest

    3.1 StringRequest

    首先创建一个StringRequest实例,构造函数中三个参数分别为:http请求方式:Get/Post,请求url,请求成功监听器(Response.Listener),请求错误监听器(Response.ErrorListener)。然后将request对象设置好Tag标记(方便以后针对性的取消请求),将request放入请求队列中。

    Get请求方式:


    image

    如果是Post方式,需要覆盖getParams()函数来想服务器提交参数。如下:


    image

    3.2ImageRequest

    请求图片的方式有三种,ImageRequest是标准方法。还有ImageLoader和NetworkImageView。

    ImageRequest:


    image

    第一个参数是图片的url,第二个是结果的listener,第三、第四个参数是maxWidth(最大宽度) 和 maxHeight(最大高度),你可以设置为0来忽略他们。然后是用于计算图片所需大小的ScaleType,然后是用于指定图片压缩方式的参数,我建议总是使用 Bitmap.Config.ARGB_8888,最后是一个错误listener。

    注意Volley默认会将这种请求的优先级设置为low。

    ImageLoader:


    image

    lruCache是用来缓存图片的,参数是图片的规格,因为在方法内部类中使用,所以定义成final类型。
    覆写imageLoader的getBitmap和setBitmap方法来读写本地图片缓存。
    创建ImageLoader,定义ImageListener,ImageLoader.get方法中传入图片url和listener。

    NetworkImageView:
    可以直接在xml中将图片控件定义成NetworkImageView,在属性里设置图片url。

    3.3JsonRequest

    String url = "http://httpbin.org/get?site=code&network=tutsplus";

    JsonObjectRequest jsonRequest = new JsonObjectRequest
    (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
    // the response is already constructed as a JSONObject!
    try {
    response = response.getJSONObject("args");
    String site = response.getString("site"),
    network = response.getString("network");
    System.out.println("Site: "+site+"\nNetwork: "+network);
    } catch (JSONException e) {
    e.printStackTrace();
    }
    }
    }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
    

    Volley.newRequestQueue(this).add(jsonRequest);

    方法跟StringRequest类型,只是在onRequest的时候可以直接返回JSON对象。如果你需要,你还可以请求JSONArray ,只需用JsonArrayRequest 替代aJsonObjectRequest就可以了。

    4.取消请求

    @Override
    protected void onStop() {
    super.onStop();
    mRequestQueue.cancelAll(new RequestQueue.RequestFilter() {
    @Override
    public boolean apply(Request<?> request) {
    // do I have to cancel this?
    return true; // -> always yes
    }
    });
    }
    这样你就不必担心在onResponse被调用的时候用户已经销毁Activity。这种情况下会抛出NullPointerException异。但是post请求则需要继续,即使用户已经改变了Activity。我们可以通过使用tag来做到,在构造GET请求的时候,添加一个tag给它。

    // after declaring your request
    request.setTag("GET");
    mRequestQueue.add(request);

    如果要取消GET请求,只需简单的添加下面的一行代码:

    mRequestQueue.cancelAll("GET");

    这样你就只会取消GET请求,让其它请求不受影响。注意你必须手动在销毁的Activity中处理这种情况。

    相关文章

      网友评论

          本文标题:Android-Volley的基本用法

          本文链接:https://www.haomeiwen.com/subject/fqpdjftx.html