深入解析:网络库入门教程篇一

更新:10-28 名人轶事 我要投稿 纠错 投诉

这是一张经典的图片。 Volley的中文翻译是“齐射、并发”,也就是说Volley特别适合数据量不大但通信频繁的场景。不支持发布大数据,不适合上传文件。本文主要介绍Volley的常见用法,共五类,StringRequest, JsonRequest ,ImageRequest, ImageLoader, NetWorkImageView准备工作:需要添加的参考库

编译“com.mcxiaoke.volley:library:1.0.19”所需的请求链接

淘宝商品搜索建议:https://suggest.taobao.com/sug?code=utf-8q=商品名称所需权限

一、StringRequest的用法

StringRequest,字面意思理解为String请求,请求的结果是一个字符串。这个怎么用,先看构造方法。

/**

/**

* 使用给定方法创建一个新请求。

*

* @param method 请求{@link Method}使用

* @param url 获取字符串的URL

* @param Listener 接收字符串响应的监听器

* @param errorListener 错误侦听器,或null 忽略错误

*/

公共StringRequest(int 方法, String url, Listenerlistener,

错误监听器错误监听器){

超级(方法,网址,错误监听器);

mListener=监听者;

}

/**

* 创建一个新的GET 请求。

*

* @param url 获取字符串的URL

* @param Listener 接收字符串响应的监听器

* @param errorListener 错误侦听器,或null 以忽略错误

*/

公共StringRequest(字符串url, Listenerlistener, ErrorListener errorListener) {

this(Method.GET, url, 监听器, errorListener);

总共有两个。第一个构造函数有四个参数,可以指定请求类型。第二个构造函数有三个参数,默认为GET 请求。现在我们尝试发起一个请求,代码可以这样写。

RequestQueue mQueue=Volley.newRequestQueue(MainActivity.this);

mQueue.add(getStringRequest());构建消息队列RequestQueue。什么是请求队列?以下是RequestQueue的类注解

/**

* 带有调度程序线程池的请求调度队列。

*

* 调用{@link #add(Request)} 会将给定的请求排入队列进行调度,

* 从工作线程上的缓存或网络解析,然后交付

* 主线程上已解析的响应。

*/大致意思是:一个带有线程池的请求调度队列,调用add方法会调度指定的请求,从一个工作线程(工作时使用的线程,即子线程)解析缓存或网络,然后在主线程上提供解析响应。

好的,明确告诉我们需要一个请求,然后添加。我们先来做一个简单的Get请求。

公共StringRequest getStringRequest() {

return new StringRequest("https://suggest.taobao.com/sug?code=utf-8q=beizi",

新的Response.Listener() {

@覆盖

公共无效onResponse(字符串响应){

Log.e(getClass().getName(),响应);

}

},

新的Response.ErrorListener() {

@覆盖

公共无效onErrorResponse(VolleyError错误){

Log.e(getClass().getName(),error.getMessage());

}

}

);第一个参数是请求的链接地址,第二个参数是正确的回调,第三个参数是错误的回调。

打印结果:

E/test.volley.com.volley.MainActivity$2: {"结果":[["杯子","5198589"],["被子","5508160"],["被子冬天被子","1657880"], ["陶瓷杯","887481"],["玻璃杯","964491"],["带盖陶瓷杯","360083"],["被芯","1835894"],["杯子创意","1946812"],["杯子保温杯","1615177"],["被子被子芯冬季被子","1436705"]]}上面是GET请求,现在使用前四个参数尝试POST请求的构造函数,

公共StringRequest(int 方法, String url, Listenerlistener, ErrorListener errorListener) {

超级(方法,网址,错误监听器); mListener=监听者;

构造中不能传递post参数,怎么办?不用大惊小怪,基本上所有的网络框架,参数都是在结构体中传递的。它必须被封装。查看StringRequest的父类Request,有很多与请求配置相关的方法,其中之一就是getParams。

/**

* 返回用于POST 或PUT 请求的参数映射。可以扔

* {@link AuthFailureError} 因为可能需要身份验证才能提供这些值。

*

*请注意,您可以直接重写{@link #getBody()} 来获取自定义数据。

*

* @throws AuthFailureError 如果身份验证失败

*/

protected MapgetParams() 抛出AuthFailureError {

返回空值;

}所以,有一个办法,重写StringRequest中的父类getParams方法,在getParams中返回我们自己的map。所以上面的Request改成这样

公共StringRequest getPostStringRequest() {

return new StringRequest(Request.Method.POST,"https://suggest.taobao.com/sug?code=utf-8q=beizi",

新的Response.Listener() {

@覆盖

公共无效onResponse(字符串响应){

Log.e(getClass().getName(),响应);

}

},

新的Response.ErrorListener() {

@覆盖

公共无效onErrorResponse(VolleyError错误){

Log.e(getClass().getName(),error.getMessage());

}

}

){

@覆盖

protected MapgetParams() 抛出AuthFailureError {

MapparamMap=new HashMap();

paramMap.put("param1","value1");

paramMap.put("param2","value3");

返回参数映射;

}

};

}总结一下步骤:

步骤1:构建RequestQueue 步骤2:构建合适的请求步骤3:将步骤2 中的请求添加到RequestQueue

StringRequest就是这么简单,但是我们更常用的是JsonRequest

二、JsonRequest的用法

。话不多说,让我们直接上代码。

私人无效dispatcherJsonObjectRequest(){

Volley.newRequestQueue(getApplicationContext()).add(new JsonObjectRequest(Request.Method.POST, "https://suggest.taobao.com/sug?code=utf-8q=diannao",

新的Response.Listener() {

@覆盖

公共无效onResponse(JSONObject响应){

Log.e(getClass().getName(),response.toString());

}

}, 新的Response.ErrorListener() {

@覆盖

公共无效onErrorResponse(VolleyError错误){

Log.e(getClass().getName(), error.getMessage());

}

}

));

}打印结果:

E/test.volley.com.volley.MainActivity$2: {"结果":[["电脑桌","3558727"],["电脑椅","1740042"],["电脑包","7051240"] ,["电脑主机","265635"],["电脑音箱","826213"],["电脑","23633255"],["电脑桌面之家","432711"],["电脑显示器" ,"401223"],["电脑耳机","577117"],["电脑椅之家","366804"]]} 对于JsonRequest请求,可以引入GSON等类似库来解析部分JSON字符串地方。

三、ImageRequest的用法

ImageRequest的构造函数如下

/**

* 创建一个新的图像请求,解码到最大指定宽度并

* 高度。如果宽度和高度都为零,则图像将被解码为

* 其自然尺寸。如果两者之一非零,则该维度将为

* 夹紧,另一个将设置为保留图像的纵横比

* 比率。如果宽度和高度都不为零,则图像将被解码为

* 适合尺寸为宽x 高的矩形,同时保持其

* 纵横比。

*

* @param url 图片的URL

* @param Listener 接收解码后的位图的监听器

* @param maxWidth 将此位图解码到的最大宽度,如果没有则为零

* @param maxHeight 将此位图解码到的最大高度,或者为零

* 没有任何

* @param scaleType 用于计算所需图像尺寸的ImageViews ScaleType。

* @paramdecodeConfig 将位图解码为的格式

* @param errorListener 错误侦听器,或null 以忽略错误

*/

公共ImageRequest(字符串url, Response.Listenerlistener, int maxWidth, int maxHeight,

ScaleTypescaleType, 配置decodeConfig, Response.ErrorListener errorListener) {

super(Method.GET, url, errorListener);

设置重试策略(

新的DefaultRetryPolicy(IMAGE_TIMEOUT_MS, IMAGE_MAX_RETRIES, IMAGE_BACKOFF_MULT));

mListener=监听者;

mDecodeConfig=解码配置;

m最大宽度=最大宽度;

mMaxHeight=最大高度;

mScaleType=缩放类型;

参数很多,一共有7个。第一个参数是图片的URL地址。第二个参数是图片请求成功的回调。第三个和第四个参数用于指定图像的最大宽度和高度。五个参数指定图像的缩放类型,第六个参数用于指定图像的颜色属性。这里可以使用Bitmap.Config下的几个常量,其中ARGB_8888可以显示每个图像像素的最佳颜色属性。占用4个字节大小,而RGB_565表示每个图像像素占用2个字节大小。第六个参数是图片请求失败时的回调。当请求失败时,ImageView 中会显示默认图像。其实我个人觉得这并不是一个好的设计。参数过多,不利于用户使用。使用此构造函数创建一个新的图像请求,解码为最大指定宽度和高度。如果宽度和高度都为零,则图像将被解码为其自身图片的大小。如果指定的网络图像的宽度或高度大于此处的最大值,则图像将被压缩。

私人无效dispatherImageRequest(){

Volley.newRequestQueue(getApplicationContext()).add(new ImageRequest("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png", new Response.Listener() {

@覆盖

公共无效onResponse(位图响应){

mImageView.setImageBitmap(响应);

}

},0,0, ImageView.ScaleType.CENTER, Bitmap.Config.ALPHA_8,new Response.ErrorListener() {

@覆盖

公共无效onErrorResponse(VolleyError错误){

mImageView.setImageResource(R.mipmap.ic_launcher);

}

}));

}

四、ImageLoader的用法

ImageLoader 内部也是使用ImageRequest 实现的。其构造函数可以传入一个ImageCache缓存参数来实现图像缓存功能。它还可以过滤重复的链接,以避免重复请求。

私有无效dispatherImageLoader() {

RequestQueue mQueue=Volley.newRequestQueue(MainActivity.this);

ImageLoader imageLoader=new ImageLoader(mQueue, new ImageLoader.ImageCache() {

int 最大尺寸=10 * 1024 * 1024;

私有LruCachemCache=新LruCache(maxSize) {

@覆盖

protected int sizeOf(字符串键, 位图位图) {

返回bitmap.getRowBytes() * bitmap.getHeight();

}

};

@覆盖

公共位图getBitmap(String url) {

返回mCache.get(url);

}

@覆盖

公共无效putBitmap(字符串url,位图位图){

mCache.put(url,位图);

}

});

imageLoader.get("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png", new ImageLoader.ImageListener() {

@覆盖

公共无效onResponse(ImageLoader.ImageContainer响应,布尔值isImmediate){

mImageView.setImageBitmap(response.getBitmap());

}

@覆盖

公共无效onErrorResponse(VolleyError错误){

mImageView.setImageResource(R.mipmap.ic_launcher);

}

});

与ImageRequest实现效果不同的是,当ImageLoader加载图片时,会先显示默认图片,等到图片加载完成后才显示在ImageView上。

5、NetworkImageView用法

NetworkImageView是一个自定义控件,继承自ImageView,封装了请求网络加载图片的功能。这个想法很好,在项目中经常可以使用,增强封装性。

添加到布局中

RequestQueue mQueue=Volley.newRequestQueue(MainActivity.this);

ImageLoader imageLoader=new ImageLoader(mQueue, new ImageLoader.ImageCache() {

int 最大尺寸=10 * 1024 * 1024;

私有LruCachemCache=新LruCache(maxSize) {

@覆盖

protected int sizeOf(字符串键, 位图位图) {

返回bitmap.getRowBytes() * bitmap.getHeight();

}

};

@覆盖

公共位图getBitmap(String url) {

返回mCache.get(url);

}

@覆盖

公共无效putBitmap(字符串url,位图位图){

mCache.put(url,位图);

}

});

mNetworkImageView.setDefaultImageResId(R.mipmap.ic_launcher);

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

用户评论

孤岛晴空

最近在学这方面的东西,这个系列博客看起来很有帮助!

    有18位网友表示赞同!

折木

终于有人整理了这些网络库的信息!之前总是有好多资料要自己筛选。

    有5位网友表示赞同!

情字何解ヘ

期待这个系列能介绍一些实用且比较流行的库。

    有14位网友表示赞同!

凉城°

我是前端小白,希望能够从这篇入门就学到一些东西。

    有18位网友表示赞同!

来自火星球的我

不知道这篇文章会聊哪些类型的网络库呢?

    有11位网友表示赞同!

晨与橙与城

最近想学习开发一些web应用,这些库应该很有用!

    有7位网友表示赞同!

话扎心

收藏 dulu, 以后学习的时候再来看。

    有16位网友表示赞同!

青衫故人

"流行" 网络库指的是什么类型?我很想知道。

    有19位网友表示赞同!

顶个蘑菇闯天下i

希望能介绍到比较详细的使用方法和教程,这样更容易上手。

    有13位网友表示赞同!

岁岁年年

我的技能有限,但我会尽力跟着这个系列学习新的东西!

    有18位网友表示赞同!

Edinburgh°南空

希望博客能覆盖各个方面,包括性能、安全性等等.

    有18位网友表示赞同!

放血

这些网络库一般都会在哪个平台上使用?

    有13位网友表示赞同!

入骨相思

学习完了这个系列后,我可以做些什么项目呢?

    有5位网友表示赞同!

無極卍盜

如果有案例代码讲解会更棒哦!

    有6位网友表示赞同!

逃避

期待后续的文章能深入介绍一些热门的库。

    有11位网友表示赞同!

在哪跌倒こ就在哪躺下

感谢作者愿意分享这些知识,这样很对新手有帮助!

    有6位网友表示赞同!

莫名的青春

这个系列博客会不会发布在别的平台上?比如Github?

    有7位网友表示赞同!

早不爱了

不知道这篇文章会针对哪一个编程语言的开发讲的?

    有5位网友表示赞同!

栀蓝

希望能多一些互动环节,让我们可以和作者交流学习。

    有16位网友表示赞同!

|赤;焰﹏゛

我很期待这篇博客能给我带来很多启发!

    有10位网友表示赞同!

【深入解析:网络库入门教程篇一】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:生活大爆炸》1080p高清中文字幕版在线观看资源分享 下一篇:Java 编程中的正则表达式指南