网络通讯库Volley精炼详解第(一)课:Volley介绍和简单使用

一、前期基础知识储备

最有价值的地方在于可逆:你将库添加到你的应用程序中,之后也可以将其删除(没有任何开销)。随时都能拿出来。不是所有的东西都可以这样,但如果它可以的话,请把它做成一个库,而不是和你的应用终生绑在一起。选择正确的库意味着你可以拥有一个已经成熟的更好的解决方案,而不是花费三个月来重新构建它。了解这些库是第一步。笔者会在第三方库做一个系列讲解,为著名的库,写写传记。

本节开始谷歌推出的网络通讯库——Volley。

(1)Volley是什么?首先,我们来看一看谷歌官方给出的Volley的描述图:

Volley,2013年谷歌I/O大会上发布的Android平台上的网络通信库,其非常适合用在“迸发、效率、性能”要求非常高的场景,即网络通信频繁的、数据量小的传输。

(2)Volley的特点

①通信更快、更简单

②Get、Post网络请求及网络图像的高效率异步处理请求

③网络请求排序优先级处理

④网络请求的缓存(网络不好时)

⑤多级别取消请求(一次性取消所有请求)

⑥和Activity生命周期的联动(随Activity一起停止,避免在后台运行)

(3)为什么选择Volley

①功能上:

1)高效的Get/Post方式的数据请求交互(自己写有很多问题!);

2)网络图片的加载和缓存。(不用Volley,自己写非常容易造成内存溢出的问题。因为可以做到缓存,所以可以节省用户的流量,而且APP本身的流畅性和性能非常稳定)。

②其他方面:

1)谷歌官方推出,所以优化和维护都做的非常好;

2)性能稳定,效率强劲。

(4)Volley的局限:不适合于文件的上传和下载,涉及到大文件的上传和下载时请考虑别的网络通讯库,比如xUtils或者另一个大名鼎鼎的库Retrofit。

(对于Retrofit 和 Volley 来说,你经常会看到些比较,你会看到 Volley 比 Retrofit 做的更多(例如图像下载和 neat ))。

二、上代码,具体实现

AndroidStudio中添加依赖

点开build.gradle,添加下面的代码到dependencies,在你的Gradle文件中添加:

compile'com.mcxiaoke.volley:library:1.0.+' ,随后Android Studio会自动添加好。

(1)Volley的请求的数据对象

Volley对Android原生的get/post请求方式做一个的封装,优化了请求的效率

在使用时需要挑选合适的返回对象。使用Volley,我们可以从网络请求常见的三种数据:①String类型;②JSON类型;③图片类型。对应的处理对象为:

1)StringRequest——我们对返回数据类型不确认的时候使用(涵盖后面两种)

2)JsonObjectRequset——确认对象为JsonObject

3)JsonArrayRequest——确认对象为JsonArray

4)ImageRequest——确认对象为图片,继承自Request,不建议使用

5)ImageLoader——确认对象为图片,不继承Request,可以缓存 更加高效

(2)Volley的一般用法

使用时,我们会建立一个全局的请求队列创建一个RequestQueue对象

然后建立我们的请求StringRequest对象

加入到请求队列mQueue.add(stringRequest)中。

前4种Volley处理的对象都可以分为这三步实现,ImageLoader除外。

整个APP的请求是通过请求队列来进行管理的,这样方便我们取消某个/所有请求。

——————————————————我是代码分隔线————————————————————

下面以StringRequest对象为例,展示如何使用Volley从网络请求一段数据。

①AndroidManifest.xml文件请求网络权限

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

②主Activity代码段

public class MainActivity extends AppCompatActivity {
        private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textview);
        RequestQueue mQueue = Volley.newRequestQueue(this);
        String url = "http://www.google.cn/";//这里输入的网址为谷歌网址
        StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                textView.setText(response);
                }
            },new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", error.getMessage(), error);
            }
        });
        mQueue.add(stringRequest);
    }
}

我们new出了一个StringRequest对象,StringRequest的构造函数有2种,这里我们使用的是第一种,默认的网络请求方式为GET,需要传入三个参数第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调。其中,目标服务器地址我们填写的是谷歌的首页,然后在响应成功的回调里打印出服务器返回的内容,在响应失败的回调里打印出失败的详细信息。

注:以下为StringRequest的构造函数的构造情况

public StringRequest(int method, String url, Listener<String> listener,
            ErrorListener errorListener) {
        super(method, url, errorListener);
        mListener = listener;
    }
	
	
public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
        this(Method.GET, url, listener, errorListener);
    }

③在使用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;  
    }  
};

运行图如下所示:


三、其他数据对象的处理方式

请问文本数据的对象还有JsonRequest和JsonArrayRequest,使用起来,均和StringRequest的使用方法类似。只要把创建的对象改为其他两种即可,创建对象的方法,和加入队列的方法保持不变。

好了,关于Volley的基本用法就讲到这里,下篇文章中我会带领大家继续探究Volley。感兴趣的朋友请继续阅读《网络通讯库Volley精炼详解第(二)课:使用Volley加载网络图片》


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值