美文网首页Volley
2、volley 官方教程-发送一个简单的请求

2、volley 官方教程-发送一个简单的请求

作者: Android那些事儿 | 来源:发表于2017-07-25 21:31 被阅读18次

    文章摘要
    1、通过Volley 发送简单请求的案例
    2、取消Volley请求


    英文文献

    可以通过创建一个RequestQueue并传递Request对象来使用Volley。RequestQueue管理用于运行网络操作,读取和写入缓存以及解析响应的工作线程。 请求对原始响应进行解析,并且Volley负责将已解析的响应分派回主线程进行传递。

    本文通过Volley 发送一个简单的请求,步骤如下:

    一、添加Internet权限

    使用Volley,你必须添加 android.permission.INTERNET权限您的应用程序的清单。没有这一点,你的应用程序将无法连接到网络。

    <uses-permission android:name="android.permission.INTERNET" />
    

    二、使用newRequestQueue

    Volley 提供了一个方便的方法Volley.newRequestQueue,设置了一个 RequestQueue对你来说,使用默认值,并启动队列。例如:

    final TextView mTextView = (TextView) findViewById(R.id.text);
    ...
    
    // Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(this);
    String url ="http://www.google.com";
    
    // Request a string response from the provided URL.
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            // Display the first 500 characters of the response string.
            mTextView.setText("Response is: "+ response.substring(0,500));
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            mTextView.setText("That didn't work!");
        }
    });
    // Add the request to the RequestQueue.
    queue.add(stringRequest);
    

    Volley总是提供在主线程解析的响应。运行在主线程上是方便用于填充UI控件与接收到的数据,你可以随意修改UI直接从您的响应处理控制,但它是许多由库,特别是有关取消请求提供了重要的语义尤为关键。

    附:运行效果

    三、发送请求

    要发送请求,只需构造一个请求,并使用add()将其添加到RequestQueue中,如上所示。一旦你添加了请求,它将通过管道移动,得到服务,并且它的原始响应被解析和传递。

    • 1、当你调用add()时,Volley运行一个缓存处理线程和一个网络调度线程池。
    • 2、当您向队列添加请求时,它由缓存线程获取并分类:如果请求可以从缓存服务,缓存响应将在缓存线程上解析,并且解析的响应将在主线程上传递。
    • 3、如果请求无法从缓存服务,则将其放置在网络队列上。第一个可用的网络线程接收来自队列的请求,执行HTTP事务,解析工作线程上的响应,将响应写入缓存,并将解析的响应发回主线程进行传递。

    请注意,诸如阻塞I / O和解析/解码等昂贵的操作在工作线程上完成。您可以从任何线程添加请求,但响应始终在主线程上传递。

    • 图1示出了请求的声明周期

    四、取消请求

    要取消请求,请在Request对象上调用cancel()。一旦取消,Volley保证您的Response Handler程序将永远不会被调用,请求会从中释放。这在实践中意味着您可以在Activity的onStop()方法中取消所有待处理的请求,并且在来处理响应处理程序时不必对getActivity()== null进行检查,是否调用了onSaveInstanceState()、是否已调用其他释放资源等生命周期方法。

    要利用此行为,您通常必须跟踪所有正在运行的请求,以便能够在适当的时间取消它们。有一个更简单的方法:您可以将标记对象与每个请求相关联。然后,您可以使用此标记来提供要取消的请求范围。例如,您可以使用他们代表的活动来标记所有请求,并从onStop()调用requestQueue.cancelAll(this)。同样,您可以使用其各自的选项卡在ViewPager选项卡中标记所有缩略图请求,并在滑动上取消以确保新标签未被来自另一个的请求所阻止。

    这是一个使用标记的字符串值的示例:

    • 1、定义你的标签,并把它添加到您的要求。
    public static final String TAG = "MyTag";
    StringRequest stringRequest; // Assume this exists.
    RequestQueue mRequestQueue;  // Assume this exists.
    
    // Set the tag on the request.
    stringRequest.setTag(TAG);
    
    // Add the request to the RequestQueue.
    mRequestQueue.add(stringRequest);
    
    • 2、在您的活动的onStop()方法,取消有这个标记的所有请求。
    protected void onStop () {
        super.onStop();
        if (mRequestQueue != null) {
            mRequestQueue.cancelAll(TAG);
        }
    }
    

    注意:只是取消了请求Request,并不会取消Request Handler。

    相关文章

      网友评论

        本文标题:2、volley 官方教程-发送一个简单的请求

        本文链接:https://www.haomeiwen.com/subject/rcugkxtx.html