Volley的基本使用

转载请注明出处:http://blog.csdn.net/forevercbb/article/details/51286441
Volley是一个比较常见的网络请求库,可以简单的进行http通信,也可以用来加载网络上的图片。Volley比较小巧,因此本身自带的请求类型较少,但是具有很强的拓展性,可以方便的进行自定义,使用起来非常灵活。最近使用到一部分功能,将基本的使用进行分享,说是基本,就真的是很基本。另外,前排感谢郭霖大神的文章http://blog.csdn.net/guolin_blog/article/details/17482095提供的帮助。

StringRequest的使用

使用StringRequest首先需要获取一个RequestQueue对象,这是Volley的一个请求队列。

RequestQueue mQueue = Volley.newRequestQueue(context);

这个队列不必每次都创建一个,一般有两种使用,一种是在需要网络交互的Activity分别创建一个就可以了。另一种是在Application的子类创建一个,全局使用。比较推荐第二种做法,一是各个Activity之间的解耦,二是需要修改或者全局设置时较为方便。

然后再创建一个StringRequest对象如下:

StringRequest request = new StringRequest(url, new Response.Listener<String>() {
    @Override
    public void onResponse(String s) {
        //请求成功的处理
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError volleyError) {
    //请求失败的处理
    }
});

这个内容相信大家都能理解,任何解释都显得苍白无力。最后将Request添加到RequestQueue里。

mQueue.add(stringRequest); 

这样,就可以完成访问网络的请求了。当然需要访问网络的权限。

<uses-permission android:name="android.permission.INTERNET" /> 

Volley默认的请求类型是GET请求,而如果要发起POST请求的话,则需要声明请求类型,和提交参数。map的内容就是需要提交的参数。

StringRequest request = 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;  
    }  
};

除了StringRequest之外,Volley还有JsonRequest、ImageRequest,用法几乎一毛一样。因此这里就不废话了。

Volley超时设置

Volley默认的超时时间为2.5秒,需要自定义的如下。TIMEOUT为自定义的超时时间。

request.setRetryPolicy(new DefaultRetryPolicy(TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

Volley的编码

Volley未提供转码的方法。可以通过重写parseNetworkResponse实现编码的设置。

protected Response<String> parseNetworkResponse(NetworkResponse response) {
    String parsed;
    try {
        parsed = new String(response.data, "utf-8");
    } catch (UnsupportedEncodingException var4) {
        parsed = new String(response.data);
    }

    return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}

查看Volley的源码,可以发现Volley对编码格式的设置规则为,如果response有指定编码格式的,则采用指定的编码格式,如果没有指定,则采用ISO-8859-1编码。源码如下。

public static String parseCharset(Map<String, String> headers) {
    String contentType = (String)headers.get("Content-Type");
    if(contentType != null) {
        String[] params = contentType.split(";");

        for(int i = 1; i < params.length; ++i) {
            String[] pair = params[i].trim().split("=");
            if(pair.length == 2 && pair[0].equals("charset")) {
                return pair[1];
            }
        }
    }

    return "ISO-8859-1";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值