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

来源:互联网 发布:巨人网络借壳辽宁成大 编辑:程序博客网 时间:2024/05/16 11: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。


关注我的技术公众号,查看更多优质技术文章推送

微信扫一扫下方二维码即可关注:

关注我的技术公众号,查看更多优质技术文章推送

原创粉丝点击