1.Volley简介:
Volley是2013年谷歌官方发布的一款Android平台上的网络通信库。Volley非常适合一些数据量不大,但需要频繁通信的网络操作。使用Volley进行网络开发可以使我们的开发效率得到很大的提升,而且性能稳定性也很高。但是Volley不适合用于文件的上传下载操作。
2.Volley的特点:
使网络通信更快,更简单,更健壮;
Get/Post网络请求及网络图像的高效率异步请求;
可以对网络请求的优先级进行排序处理;
可以进行网络请求的缓存;
可以取消请求;
3. Volley的使用:
(1)在build.gradle文件中,加入Volley的依赖:
implementation 'com.android.volley:volley:1.2.1'
(2) 在MainActivity的onCreate方法中,初始化Volley Request对象:
mQueue = Volley.newRequestQueue(this);
(3)在清单文件中进行网络权限的申请,
<uses-permission android:name="android.permission.INTERNET" />
否则,会出现如下错误提示:
Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
(4)例1: StringRequest的使用:
以请求“https://www.baidu.com”为例来说明:
private void TestStringRequest() {
StringRequest stringRequest = new StringRequest("https://www.baidu.com",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
mResTextView.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getMessage(), error);
}
});
mQueue.add(stringRequest);
}
运行结果,会输出如下log:
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css>
(5)例2:JsonObjectRequest的请求:
private void TestJsonRequest() {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("https://www.tianqiapi.com/api/?version=v1",
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "[success]:" + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "[Fail]:" + error.getMessage(), error);
}
});
mQueue.add(jsonObjectRequest);
}
运行结果,输出如下日志:
[success]:{"errcode":100,"errmsg":"缺少注册参数appid或appsecret 请仔细看文档,账号注册地址 https:\/\/tianqiapi.com\/"}
(6)例3:网络图片的加载:
ImageRequest imageRequest = new ImageRequest("https://avatar.csdn.net/5/6/A/3_u010356768.jpg",
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
img.setImageBitmap(response);
}
}, 0, 0, Bitmap.Config.RGB_565,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
img.setImageResource(R.mipmap.ic_launcher);
}
});
运行结果:
可以看出,正常加载了图片。
4. 补充:
(1)Volley是一个异步网络请求框架,当接收到response时,就已经是在主线程了,所以,可以直接在onResponse中进行ui的处理,不需要再用诸如handler这样的方式了;
(2)Volley框架功能非常强大,而且可以灵活进行参数等的设置。