- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Volley使用
Android网络通信框架Volley简介(Google IO 2013)Volley主页?/platform/frameworks/volley?/watch?v=yhv8l9F44qofeature=player_embedded1. 什么是Volley在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。这是Volley名称的由来: a burst or emission of many things or a large amount at once在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。见下图其实,从这幅图,我们也可以看出来,Volley特别适合数据量不大但是通信频繁的场景。1.1. Volley引入的背景在以前,我们可能面临如下很多麻烦的问题。比如以前从网上下载图片的步骤可能是这样的流程:在ListAdapter#getView()里开始图像的读取。通过AsyncTask等机制使用HttpURLConnection从服务器去的图片资源在AsyncTask#onPostExecute()里设置相应ImageView的属性。而在Volley下,只需要一个函数即可,详细见后面的例子。再比如,屏幕旋转的时候,有时候会导致再次从网络取得数据。为了避免这种不必要的网络访问,我们可能需要自己写很多针对各种情况的处理,比如cache什么的。再有,比如ListView的时候,我们滚动过快,可能导致有些网络请求返回的时候,早已经滚过了当时的位置,根本没必要显示在list里了,虽然我们可以通过ViewHolder来保持url等来实现防止两次取得,但是那些已经没有必须要的数据,还是会浪费系统的各种资源。1.2. Volley提供的功能简单来说,它提供了如下的便利功能:JSON,图像等的异步下载;网络请求的排序(scheduling)网络请求的优先级处理缓存多级别取消请求和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)2. 使用前的准备引入Volley非常简单,首先,从git库先克隆一个下来:git?clone?/platform/frameworks/volley然后编译为jar包,再在自己的工程里import进来。注意,这个库要求最低SDK版本为Froyo,即至少要设置android:minSdkVersion为8以上。3.使用例子下面简单看看如何使用Volley3.1. 最简单的get请求这个例子很简单,从网络取得JSON对象,然后打印出来。mQueue = Volley.newRequestQueue(getApplicationContext());mQueue.add(new JsonObjectRequest(Method.GET, url, null,? ? ? ? ? ? new Listener() {? ? ? ? ? ? ? ? @Override? ? ? ? ? ? ? ? public void onResponse(JSONObject response) {? ? ? ? ? ? ? ? ? ? Log.d(TAG, response : + response.toString());? ? ? ? ? ? ? ? }? ? ? ? ? ? }, null));mQueue.start();3.2. 给ImageView设置图片源//?imageView是一个ImageView实例??//?ImageLoader.getImageListener的第二个参数是默认的图片resource?id??//?第三个参数是请求失败时候的资源id,可以指定为0??ImageListener?listener?=?ImageLoader.getImageListener(imageView,?android.R.drawable.ic_menu_rotate,?android.R.drawable.ic_delete);??mImageLoader.get(url,?listener); ?//mImageLoader怎么构造3.3. 使用NetworkImageViewVolley提供了一个新的控件NetworkImageView来代替传统的ImageView,这个控件的图片属性可以通过mImageView.setImageUrl(url,?imageLoader) ?来设定。而
文档评论(0)