zoukankan      html  css  js  c++  java
  • 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就不会执行。

  • 相关阅读:
    文件上传到服务器,写入文件和读取文件
    ajax
    jquery.gritter 提示
    lambda
    C# 对象初始化器和集合初始化器
    C# HttpHelper万能框架实现 接口
    插件总结
    backbone.js之Model篇 简单总结和深入(2)
    backBone.js初识
    利用 bugly 分析应用崩溃
  • 原文地址:https://www.cnblogs.com/lout/p/4885381.html
Copyright © 2011-2022 走看看