Android网络请求 ------ Volley的使用
Volley是Google官方的网络异步请求库,最大的特点是简单高效,多并发。但Volley不适合数据的上传和下载。
一、Get请求的使用
1、根据请求数据返回的形式选择合适的对象
Volley提供了StringRequest、JsonObjectRequest、JsonArrayRequest三种对象供我们选择。
(a)StringRequest ——- 主要用于我们不确定数据返回类型的情况。
(b)JsonObjectRequest ——- 主要用于返回的数据类型是JsonObject的情况。
(c)JsonArrayRequest ——- 主要用于返回的数据类型是JsonArray的情况。
注:StringRequest是包含其他两种类型的,选择使用最合适最接近的类型可以提升性能。
2、生成请求对象
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {//成功的接口回调@Overridepublic void onResponse(String s) {Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();}
}, new Response.ErrorListener() {//失败的接口回调@Overridepublic void onErrorResponse(VolleyError volleyError) {Toast.makeText(MainActivity.this,volleyError.toString(), Toast.LENGTH_LONG).show();}
});
3、创建请求队列,以便存放上面创建的请求
public class MyApplication extends Application {private static RequestQueue queues;@Overridepublic void onCreate() {super.onCreate();//实例化请求队列queues = Volley.newRequestQueue(getApplicationContext());}public static RequestQueue getHttpQueues(){return queues;}
}
注:还要在AndroidManifest.xml文件中的application标签中加入刚才新建的MyApplication。
android:name=".MyApplication"
4、给请求设置tag标签
stringRequest.setTag("phone");
5、将请求加入请求队列
MyApplication.getHttpQueues().add(stringRequest);
二、Post请求的使用
Post请求的使用,绝大部分步骤是与Get请求是相同的,唯一的区别在于Get请求将要请求的参数以 ? + 键值对的方式接在链接之后,而Post请求需要重写其中的方法来传入参数,如下:
StringRequest str = new StringRequest(Request.Method.POST, url , new Response.Listener<String>() {@Overridepublic void onResponse(String s) {}
}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError volleyError) {}
}){@Overrideprotected Map<String, String> getParams() throws AuthFailureError {Map<String, String> map = new HashMap<>();map.put("apikey", apiKey);map.put("method", "publish");map.put("appkey", "5316bd7179b6570f2ca6e20b");map.put("seckey", "sec-qaAQOCmuFL22b0mv78hcOEyc9DzB9q0zesIfBAereaN6FAcb");map.put("topic", "test_topic");map.put("msg", "this is one message");return map;}
};
上面我们都是只介绍了StringRequest类,假设我们返回的是JsonObject类型的数据,我们采用JsonObjectRequest类呢,其实大部分参数还是不变的,只是她的构造函数多了一个JsonObject类型的参数,用于传入需要POST的数据,如果是Get方式,则直接传入null,下面是一个简单的例子:
private void volleyPost() {
final String apiKey = "f04a61e";
String url = "http://apis.baidu.com/yunba/realtime_restful_api/publish";
Map<String, String> map = new HashMap<>();
map.put("apikey", apiKey);
map.put("method", "publish");
map.put("appkey", "5316bd7179b6570f2ca6e20b");
map.put("seckey", "sec-qaAQOCmuFL22b0mv78hcOEyc9DzB9q0zesIfBAereaN6FAcb");
map.put("topic", "test_topic");
map.put("msg", "this is one message");JSONObject json = new JSONObject(map);
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, json, new Response.Listener<JSONObject>() {@Overridepublic void onResponse(JSONObject jsonObject) {Toast.makeText(MainActivity.this, "DD" + jsonObject.toString(), Toast.LENGTH_LONG).show();}
}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError volleyError) {Toast.makeText(MainActivity.this, "F" + volleyError.toString(), Toast.LENGTH_LONG).show();}
});jsonRequest.setTag("xiao");MyApplication.getHttpQueues().add(jsonRequest);
}
注:我们还应该在Activity的生命周期结束时,结束网络请求,所以我们需要在Activity的onStop()方法中添加如下一句:
MyApplication.getHttpQueues().cancelAll("tag");
三、使用Volley加载网络图片
Volley中加载网络图片有很多种方式:
1、使用ImageRequest加载网络图片
ImageRequest加载网路图片的方式和Volley中进行一般的网络请求差别不大,只是参数略有不同。参数依次为图片url、请求成功的回调、图片的最大宽度,最大高度(此处传入0则是用原始尺寸解码显示,传入其他数据则按比例进行缩放解码)、图片的缩放类型、图片的显示配置、请求失败的回调。下面是一个简单的例子:
/*** 网络请求并设置图片*/
private void setImage() {String url = ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {@Overridepublic void onResponse(Bitmap bitmap) {imageView.setImageBitmap(bitmap);}}, 0, 0, ImageView.ScaleType.CENTER_INSIDE, Bitmap.Config.RGB_565, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError volleyError) {imageView.setBackgroundResource(R.mipmap.ic_launcher);}});request.setTag("image");MyApplication.getHttpQueues().add(request);
}
注:图片的网路请求还是和前面一样需要设置tag,再加入请求队列中。
2、使用 LruCache、ImageCache和ImageLoader结合加载网络图片
我可以先定义一个类用于实现ImageCache,在其中结合LruCache完成对图片的缓存,这个类的实例将作为后面的参数传入。
public class BitmapCache implements ImageLoader.ImageCache {public LruCache<String, Bitmap> cache;//最大缓存为10M,当缓存大于设定值时将自动启动垃圾回收public int max = 10 * 1024 * 1024;public BitmapCache(){//实例化cachecache = new LruCache<String, Bitmap>(max){@Overrideprotected int sizeOf(String key, Bitmap value) {return value.getRowBytes() * value.getHeight();}};}@Overridepublic Bitmap getBitmap(String s) {//返回缓存中的图片return cache.get(s);}@Overridepublic void putBitmap(String s, Bitmap bitmap) {cache.put(s, bitmap);}
}
接下来我们需要获得ImageLoader的实例
//创建ImageLoader的实例(参数依次为请求队列和图片缓存)
ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache());
接着我们需要获得图片加载监听类的实例
imageView = (ImageView) findViewById(R.id.show_image);
//创建图片加载监听实例(参数依次为图片显示控件实例,默认显示的图片的id,加载出错时显示的图片的id)
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
最后我们传入相应的参数来加载图片
String url = "https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1472736685&di=ea36b0007865cef24d9d659c03b26485&src=http://img.sucai.redocn.com/attachments/images/201002/20100206/20100206_c3f11163684180e389c57LUEUjSMDaax.jpg";
loader.get(url, listener);
3、使用Volley自带的NetworkImageView结合ImageLoader进行图片加载
首先获得ImageLoader的实例
//创建ImageLoader的实例(参数依次为请求队列和图片缓存)
ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache());
获得NetworkImageView的实例并设置简单的参数
//设置默认显示的图片 netImageview.setDefaultImageResId(R.mipmap.ic_launcher);
//设置加载错误时需要显示的图片 netImageview.setErrorImageResId(R.mipmap.ic_launcher);
最后设置需要加载的图片
//设置需要加载的图片
netImageview.setImageUrl(url, loader);
以上就是我在学习Volley的过程中的一个简单的记录总结。
Android网络请求 ------ Volley的使用相关推荐
- ym—— Android网络框架Volley(终极篇)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看 Android网络框架Volley(体验篇) ...
- Android -- 网络请求
一. HttpURLConnection 二. HttpClient 三.Volley 四.OkHttp 五. Retrofit ----------------------------------- ...
- okhttp的应用详解与源码解析--android网络请求框架发展史
乘5G之势,借物联网之风,Android未来亦可期,Android优势在于开放,手机.平板.车载设备.智能家居等都是Android的舞台,Google不倒,Android不灭,本专栏的同步视频教程已经 ...
- Android网络框架Volley项目实战-刘桂林-专题视频课程
Android网络框架Volley项目实战-5257人已学习 课程介绍 使用Google 2013 I/O大会上发布的Volley请求框架做几个实战项目,归属地查询,QQ测试吉凶,天气 ...
- Android网络请求框架之Retrofit(二)
前面一篇文章介绍了Retrofit的基本用法,没有看过的童鞋可以移步:Android网络请求框架之Retrofit(一),现在我们来继续介绍Retrofit配合RxJava.RxAndroid的用法. ...
- Volley网络请求框架简析——Android网络请求框架(三)
题记-- 人来到这个世界上,只有两件事情,生与死, 一件事完了,另一件事还急什么? 有缘而来,无缘而去, 识自本心,见自本性 不起妄缘,无心无为 自由自在,动静自如 冷暖自知,则是修行 1.初始化一个 ...
- android网络请求库volley方法详解
使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列 ...
- Android网络请求通信之Volley
一.Volley简介 Volley网络框架是Google公司在2013年发布的一款Android平台上的网络请求通信库.以下是对Volley的简单归纳. Volley的优点: 使网络通信更快.更简单. ...
- Android网络请求框架Volley的使用
Volley是Google在2013年推出的一款网络请求的框架,主要解决数据量小但是请求频繁的情况,对于大流量的比如文件上传下载,流媒体等则表现不佳.一般用于json获取,图片加载. 要想使用voll ...
最新文章
- iOS10 UI教程视图的生命周期
- python爬虫人门(10)Scrapy框架之Downloader Middlewares
- jmeter察看结果树-响应数据乱码
- Notepad++高亮AS文件
- css+html弄出哆啦a梦,祝儿童节快乐(DIV+CSS绘制哆啦A梦)
- Python学习笔记:序列之字符串
- POJ 1064 Cable master (二分答案)
- 检讨:丢了我女儿和项目设计感想
- 学科前沿技术专题第九章
- MiroTik 路由器配置无线中继模式(超细教程)
- SREng 使用指南(二)启动项目详细解说
- 最优化算法之粒子群算法(PSO)
- 在线二进制取余计算机,十进制转二进制和十六进制计算器
- xml的三种解析方法
- 鸿蒙手表定位功能Demo体验,适用儿童、老年和外出旅游安全市场
- 异步编程之 Isolate
- C语言实现七夕表白爱心
- RLC串联电路截止频率
- 解密中国互联网企业创始人,程序员打下半壁江山
- 【Codeforces】1635E Cars 题解