• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > volley框架的使用

volley框架的使用

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了volley框架,android volley框架,volley框架下载,volley框架详解,volley框架上传图片等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

volley框架的使用


volley框架的基本使用

使用的原因

Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。
不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码

主要就是进行了以下三步操作:

创建一个RequestQueue对象。创建一个XXXXXRequest对象。将XXXXXXRequest对象添加到RequestQueue里面。

字符串的请求

第一步获取到RequestQuene对象

RequestQueue mQueue = Volley.newRequestQueue(context);

关于RequestQuene

RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。

第二步创建StringRequest对象

第一个参数是url地址,第二个参数是请求成功处理返回来的数据 第三个参数是请求失败进行的处理

 StringRequest stringRequest = new StringRequest("http://www.baidu.com",  
                    new Response.Listener() {  
                        @Override  
                        public void onResponse(String response) {  
                            Log.d("TAG", response);  
                        }  
                    }, new Response.ErrorListener() {  
                        @Override  
                        public void onErrorResponse(VolleyError error) {  
                            Log.e("TAG", error.getMessage(), error);  
                        }  
                    });  

第三步需要将stringRequest添加到mQuene里面即可

mQueue.add(stringRequest);

JsonObjectRequest请求

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null,  
    new Response.Listener() {  
        @Override  
        public void onResponse(JSONObject response) {  
            Log.d("TAG", response.toString());  
        }  
    }, new Response.ErrorListener() {  
        @Override  
        public void onErrorResponse(VolleyError error) {  
            Log.e("TAG", error.getMessage(), error);  
        }  
    });  

其中response.toString()就是返回来的数据只需要处理器就行

ImageRequest请求

  ImageRequest request = new ImageRequest("http://www.2cto.com/uploadfile/Collfiles/20141103/201411030837265.png", new Response.Listener() {
        @Override
        public void onResponse(Bitmap bitmap) {
            image.setImageBitmap(bitmap);
        }
    },0,0, ImageView.ScaleType.MATRIX,Bitmap.Config.ARGB_8888,new Response.ErrorListener(){

        @Override
        public void onErrorResponse(VolleyError volleyError) {
            image.setImageResource(R.drawable.ic_empty);
        }
    }); 
第一个参数就是图片的URL地址,这个没什么需要解释的。第二个参数是图片请求成功的回调,这里我们把返回的Bitmap参数设置到ImageView中。第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩, 指定成0的话就表示不管图片有多大,都不会进行压缩。第五个参数用于 根据容器的边界来选择图片的缩放比例第六个参数用于指定图片的颜色属性,第七个参数是图片请求失败的回调 这里可以默认一张失败的图片

ImageLoader

ImageLoader也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的,不过ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。
由于ImageLoader已经不是继承自Request的了,所以它的用法也和我们之前学到的内容有所不同

总结起来大致可以分为以下四步:

创建一个RequestQueue对象。创建一个ImageLoader对象。获取一个ImageListener对象。

调用ImageLoader的get()方法加载网络上的图片。

ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {  
     @Override  
    public void putBitmap(String url, Bitmap bitmap) {  

        }  

    @Override  
    public Bitmap getBitmap(String url) {  
        return null;  
    }  
}); 

ImageLoader的构造函数接收两个参数,第一个参数就是RequestQueue对象,第二个参数是一个ImageCache对象

接下里创建ImageListen对象

ImageListener listener = ImageLoader.getImageListener(imageView,  
    R.drawable.default_image, R.drawable.failed_image);  

最后,调用ImageLoader的get()方法来加载图片

imageLoader.get("http://www.2cto.com/uploadfile/2016/0413/20160413101119415.jpeg", listener); 

可以控制其大小
imageLoader.get(“http://www.2cto.com/uploadfile/2016/0413/20160413101119415.jpeg“,
listener, 200, 200);

想要写一个好的ImageCache对象 需要用到Android的LruCache功能了

public class BitmapCache implements ImageCache {  

    private LruCache mCache;  

    public BitmapCache() {  
        int maxSize = 10 * 1024 * 1024;  
        mCache = new LruCache(maxSize)  {  
           @Override  
            protected int sizeOf(String key, Bitmap bitmap) {  
               return bitmap.getRowBytes() * bitmap.getHeight();  
           }  
         };  
     }  

     @Override  
     public Bitmap getBitmap(String url) {  
         return mCache.get(url);  
     }  

     @Override  
      public void putBitmap(String url, Bitmap bitmap) {  
         mCache.put(url, bitmap);  
      }  

}  

这里我们将缓存图片的大小设置为10M。接着修改创建ImageLoader实例的代码,第二个参数传入BitmapCache的实例,如下所示:

ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());  

NetworkImageView的用法

需要遵循以下五步:

创建一个RequestQueue对象。创建一个ImageLoader对象。在布局文件中添加一个NetworkImageView控件。在代码中获取该控件的实例。设置要加载的图片地址。

第一第二步

    RequestQueue requestQueue = VolleyUtil.getQueue(getActivity());
    ImageLoader loader = new ImageLoader(requestQueue,new LruImageCache());

首先修改布局文件中的代码,在里面加入NetworkImageView控件,如下所示:

  

然后获取控件

networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);  

到了NetworkImageView控件的实例之后,我们可以调用它的setDefaultImageResId()方法、setErrorImageResId()方法和setImageUrl()方法来分别设置加载中显示的图片,加载失败时显示的图片,以及目标图片的URL地址,如下所示:

networkImageView.setDefaultImageResId(R.drawable.default_image);  
networkImageView.setErrorImageResId(R.drawable.failed_image);  
networkImageView.setImageUrl("http://www.2cto.com/uploadfile/Collfiles/20141103/201411030837265.png",  
      



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android网络编程(四)从源码解析Volley
  • volley框架的使用
  • Android网络编程(三)Volley用法全解析
  • Android Volley框架的使用(5),androidvolley
  • Volley的基本使用,Volley使用
  • Volley源码解析
  • Android Volley框架的使用(4),androidvolley
  • Android Volley框架的使用,androidvolley框架

相关文章

  • 2017-05-26ContentProvider中央档案馆,以及获取联系人电话的示例,contentprovider
  • 2017-05-26Mac下载安装Android Studio教程,androidstudio
  • 2017-05-26硅谷新闻7--顶部轮播图循环播放,7--循环播放
  • 2017-05-26Android系统属性简介,android属性简介
  • 2017-05-26android自定义activity,androidactivity
  • 2017-05-26NDK中使用pthread多线程中自己写的一个BUG,ndkpthread
  • 2017-05-26android源码解析之(四)--)IntentService
  • 2017-05-26OKHttp,okhttp使用
  • 2017-05-26新闻客户端应用项目源码,客户端项目源码
  • 2017-05-26自动完成文本框(AutoCompleteTextView与MultiAutoCompleteTextView)关联适配器,文本框autocomplete

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 硅谷社交7--添加联系人--接收添加好友邀请,硅谷7--
    • 安卓多线程间通信和多进程之间通信有什么不同?分别怎么实现?,安卓多线程
    • 日志文件之出错处理
    • Android数据存储之SQLite
    • 依赖ConstraintLayout报错,Could not find *****,Failed to resolve:*****,constraintlayout
    • MaterialRefreshLayout,swiperefreshlayout
    • Android软件开发之SharedPreferences,sharedpreferences
    • 配置Nginx反向代理Exchange 2007上的OWA
    • android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)
    • Android Studio创建/打开项目时一直处于Building“project name”Gradle project info的解决办法,androidgradle

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有