Volley使用指南第一回(来自developer.android)

最近闲来想看看android网络方面的东西。google在2013年发布了一个叫做Volley的网络请求框架,我看了一下官网,居然在training里面就有教程。首先,英文的东西看着

还是挺不爽的,特此翻译一下,正好自己也学习一下, 可能最后有时间也会去研究一下它的源码是怎么写的。下面开始:

第一回:发送一个简单的请求

当你用Volley的时候,你的流程分为几步:

1、你会创建一个RequestQueue并且传给它一个Request对象。

2、之后这个RequestQueue就会组织一些工作线程(奴隶?)来运行这个网络请求操作。

3、请求完成之后写入cache并解析这个返回的结果。Request的工作是解析这个原始的返回,Volley关心的是怎么把这些返回的数据传送到你的主线程。

这一回课将会叫你怎样通过通过Volley.newRequestQueue这个方便的方法来发送一个请求,这个方法会为你自动创建一个RequestQueue。如果想要知道怎么自定义一个RequestQueue

请看Volley使用指南第二回。下面我们来看看怎样在RequestQueue里面添加一个request和怎样取消一个request

第一步。首先,你要把android网络权限打开,把android.permission.INTERNET添加到你的mainifest文件里面。

第二步。

使用newRequestQueue:

Volley提供了一个方便的方法叫做Volley.newRequestQueue,它可以为你自动创建一个RequestQueue,那么它使用的是默认参数启动这个queue,举个栗子:

 1 final TextView mTextView = (TextView) findViewById(R.id.text);
 2 ...
 3
 4 // Instantiate the RequestQueue.
 5 RequestQueue queue = Volley.newRequestQueue(this);
 6 String url ="http://www.baidu.com";
 7
 8 // Request a string response from the provided URL.
 9 StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
10             new Response.Listener<String>() {
11     @Override
12     public void onResponse(String response) {
13         // Display the first 500 characters of the response string.
14         mTextView.setText("Response is: "+ response.substring(0,500));
15     }
16 }, new Response.ErrorListener() {
17     @Override
18     public void onErrorResponse(VolleyError error) {
19         mTextView.setText("That didn‘t work!");
20     }
21 });
22 // Add the request to the RequestQueue.
23 queue.add(stringRequest);

那么google被墙,测试网站就用百度。Volley做的工作是把解析好的response发给主线程。在主线程里面使用接收到的数据填充UI是很容易的,因为你可以很轻松地使用handler

改变你的UI,但这对于这个框架的其他语法来说是相当危险的, 比如说取消操作。

第三步。发送一个请求。

要发送请求,你首先要构造一个用add()方法把它添加到RequestQueue里面。当你把它add进去了以后,它就会通过一个类似于管道的东西,之后得到执行,把获取到的东西

解析出来然后传递到主线程。当你调用call()方法的时候,Volley会启动一个缓存线程和一些网络分发线程。当你添加一个request,它会被cache线程识别和筛选,过程是:

如果你的request能够被cache所服务(已经缓存),那么它就会被cache线程解析并发送到主线程。如果没有被缓存,执行以下几步:

1、就把它加入网络请求的队列。

2、第一个可用的网络线程从RequestQueue中接到这个工作,执行http请求。

3、在worker thread里面解析这个请求

4、把解析好的数据写入cache。

5、最后把数据发送到主线程。

下面是这一过程的生命周期图:

第四步。取消一个请求

要取消一个请求,在你的Request对象上调用cancal()方法。一旦取消请求,Volley就一定不会执行response handler。你可以在onStop()方法里面把即将发出的请求取消掉,

这样你就不用处理一团乱的response handlers问题,无论对于onSaveInstanceState()已经被调用还是其他问题。

如果你想利用好这个特性,你要给每个执行中的request打上一个标记以便在必要的时候取消它们。有一个简单的方法可以做到这一点:你可以为你的request对象和一个tag对象

做一个联系,然后你可以利用这些标记取消请求。举个栗子:你可以为你的Activity所有的request都打上标签,然后在onStop()方法调用requestQueue.cancelAll(this)。

同样的,你可以为viewPager里面的图片请求打上标签并在适当的时间取消请求,以便在滑动标签的时候,下一个标签页不会因为上一个标签页的图片请求未完成而挂起。

下面是一个使用string tag的栗子:

1 public static final String TAG = "MyTag";
2 StringRequest stringRequest; // Assume this exists.
3 RequestQueue mRequestQueue;  // Assume this exists.
4
5 // Set the tag on the request.
6 stringRequest.setTag(TAG);
7
8 // Add the request to the RequestQueue.
9 mRequestQueue.add(stringRequest);
1 @Override
2 protected void onStop () {
3     super.onStop();
4     if (mRequestQueue != null) {
5         mRequestQueue.cancelAll(TAG);
6     }
7 }

当你在取消请求的时候要当心。如果你使用response handler去推进一个状态或者是启动另外一个进程,你要为此负责。再说一遍,一旦取消,response handler就不会执行。

时间: 2024-10-27 13:28:06

Volley使用指南第一回(来自developer.android)的相关文章

Volley使用指南第三回(来自developer.android)

继第二篇之后,再来Volley使用的教程的第三篇,有些翻译我是根据自己的理解,可能有错误的地方,还请多多包涵. 标准请求 这一回课将会告诉你Volley能够完成的3种请求类型 1.StringReqeust:请求一个String类型的返回,具体看Volley使用指南第一回. 2.ImageRequest:请求图片. 3.JsonObjectRequest和JsonArrayRequest (这两个都是JsonRequest的子类):请求在response中返回一个json object类型. 如

学习使用Volley的多种基本功能-来自官方文档

官方文档地址:https://developer.android.com/training/volley/requestqueue.html 之前一直没看到这个,原来官方已经正式有关于Volley的文档了,而且这是被建议使用的Network库. 因为之前有写过简单的Volley请求怎么写,下面介绍的都是我之前不知道的用法: 1.先上代码: 1 Cache cache = new DiskBasedCache(getCacheDir(),1024*1024); 2 Network network

NFC Basics(基本NFC)——翻译自developer.android.com

NFC Basics 关于收发NDEF格式的消息,以及相关的api.非NDEFdata以及其他更深入技术请参见Advanced NFC. 在android端使用NDEF有两种情况: - 从标签读取NDEF数据 - 从另个android手机中使用androidBeam来获取信息. android使用标签派发系统来处理读取NDEF数据的情况,通过分析发现的标签,给数据分类,然后启动一个关注这个分类数据的app.应用程序可以通过注册Intent过滤器(Intent Filter)来获取关注的标签信息.

【转帖】Mysql多维数据仓库指南 第一篇 第1章

 Mysql多维数据仓库指南 第一篇基本原理 章节列表: 第1章:基本组成 第2章:维度历史 第3章:维度可加性 第4章:维度查询 本篇概述 你将运用关系数据库来实施一个维度数据仓库.事实表和维表这两种类型的关系表构成了一个数据仓库模式的基本部分,在本书的第一部分,你将用mysql数据库建立这些基本部分. 第1章:基本组成   概述        本章将了解两个重要的主题:星型模式和代理键.星型模式是一种维度数据仓库的数据结构.代理键是在数据仓库中添加到事实表以作为主键的字段. 在本章你将开始一

developer.android.google.cn

Android Studio官方 Android IDE https://developer.android.google.cn/studio/index.html 探索 Android Studio https://developer.android.google.cn/studio/intro/index.html 构建您的第一个应用 https://developer.android.google.cn/training/basics/firstapp/creating-project.h

source.android.google &amp;&amp; developer.android.google

https://source.android.google.cn/ https://developer.android.google.cn/ android源代码各个版本在线查看网址 http://androidxref.com/ https://www.androidos.net.cn/ https://www.androidos.net.cn/sourcecode  不错 https://github.com/aosp-mirror  不错 https://github.com/aosp-m

developer.android.com上Accessibility文档翻译

Android开发文档API Guides网上没有中文翻译的,最近在看这部分内容,顺便给大家做翻译. 英文水平不好,大家包涵. 文档连接是http://developer.android.com/guide/topics/ui/accessibility/index.html Accessibility Topics Making Applications Accessible Accessibility Developer Checklist Building Accessibility Se

8.无法访问developer.android.com的解决方案。

问题:无法访问developer.android.com,就无法知道Android的最新信息. 解决办法:寻找国外的代理ip,比如http://www.xici.net.co/上面的国外代理ip. 设置方法:以谷歌浏览器(Chrome)为例. step1:点击"设置". step2:点击"显示高级设置". step3:点击"网络"标签下的"更改代理服务器设置". step4:在"连接"标签下,点击"

程序演义第一回哥伦布水杯戏权贵

2.1第一回 哥伦布水杯戏权贵,阿兰煮酒论编程 第一回介绍的故事是关于航海家哥伦布的,本质上只说了一件事:什么是程序? 程序是怎么回事,和哥伦布又有什么关系呢?说简单很简单,用两个杯子比划一下就有了.故事还要从很久以前说起,1492年10月12日,哥伦布(Christopher Columbus)发现了新大陆--美洲大陆,他是发现美洲的第一人:同样的,在电脑世界中也有许多第一,那问一个最简单的问题:第一个程序是谁发明的呢?对于这个问题,现在很难考证.但经阿兰论证,程序和哥伦布有一定的关系,不信,