您的位置:首页 > 理论基础 > 计算机网络

Android学习记录20171023--Volley网络框架(一)

2017-10-23 18:04 495 查看
奉天承运,领导召曰:你们几个实习生把Volley的实用方法都学透一点。so,我又重新看了一遍volley,原来就是潦草的看看怎么用就行了,这次一定要深入学习一下。

我是跟着郭霖大佬的帖子学的,这里就是做做笔记加自己的理解,不喜勿喷。

郭霖大佬的文章:

Android Volley完全解析(一),初识Volley的基本用法

进入正题:

一、Volley简介

主要内容就是Volley封装了各种网络请求,我们只需要调用一些简单的方法就能实现网络通信。volley比较适合进行数据量不大,通信频繁的网络操作,对于大数据量的网络操作性能不佳,比如文件下载(划重点,这里会出一道送命题!)

二、下载Volley

很尴尬,郭霖大神的下载需要8个积分,我很穷下载不起,只好另辟蹊径,在别的项目里面拷了一个出来(是不是很机智),其实我也在网上下载了一个不过没用过,看里面的文件是差不多的,我就都放在网上可以下载使用一下。

获取jar包有三种方式:

1.网上下载,可以百度一波,如果分多可以在csdn上直接下载,或者从我这下载需要两积分,我也想设置零积分,可是没有这个选项啊。

(没上传成功。。。放一个郭霖大神的下载链接)

http://download.csdn.net/download/sinyu890807/7152015

2.可以到我的项目里面直接拷出来用,简单粗暴

项目里面有这个包,自行获取

https://github.com/Lixinyu00/RecyclerView_ImageDemo

3.clone官方的项目自己导出jar包,具体方法自行百度

三、StringRequest

使用三步走:

1.创建一个RequestQueue请求队列

2.创建一个StringRequest对象

3.将request对象添加到队列中

上代码:

第一步:创建队列

RequestQueue requestQueue = Volley.newRequestQueue(this);


根据郭霖大佬说的,这个队列可以缓存所有的HTTP请求,而且非常适合高并发(我也不知道咋设计的,想知道的话再查吧),我们只需要在Activity中创建一个队列就可以了。

第二部:创建请求对象

StringRequest stringRequest = new StringRequest("https://www.baidu.com",
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
textView.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e(this.toString(), "onErrorResponse: ",volleyError );
}
});


没错,这步我们获得的是一个request对象,需要传入三个参数第一个是url地址,第二个是响应成功的回调监听,第三个是响应失败的回调监听。

第三步:

将request对象添加到队列中

requestQueue.add(stringRequest);


至此,我们的字符串的请求就完成了,可谓是相当简单。

运行结果图:



StringRequest构造方法方法有两个:

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

public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
this(0, url, listener, errorListener);
}


显然,我们实现的的是第二个构造方法,他是默认以get方式做请求的,如果我们想通过post方式做交互的话,就需要第一个构造方法了,就像这样:

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


Method.POST就是指定请求方式为Post。

以下这段是抄写的,因为现在也不怎么用POST了,而且我也不知道去哪请求post类型的,就先不研究了所以也没写代码实现

可是这只是指定了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;
}
};


JsonRequest

JsonRequest是个抽象类,所以我们用的时候用的都是它的子类,JsonObjectRequest和JsonArrayRequest,一个是用来请求jsonobject字段的,一个是用来请求json数组的。

具体使用方法呢也跟StringRequest差不多,也是三步走,在这我就先放个JsonObjectRequest的代码了。

第一步:创建队列(同上)

第二步:创建一个JsonObjectRequest对象,参数为url,jsonobject(post时添加参数),响应成功回调监听,响应失败回调监听

sonObjectRequest jsonRequest=new JsonObjectRequest("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1", null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
textView.setText(jsonObject.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e(this.toString(), "onErrorResponse: ",volleyError );
}
});


第三步:

将request对象添加到队列中

requestQueue.add(stringRequest);


未完待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: