为什么要在Android中使用RequestQueue?

问题描述 投票:0回答:2

[我是一名Android初学者。我想知道为什么我们应该在代码中使用RequestQueue并将JsonObjectRequest传递给RequestQueue作为参数。

enter image description here

java android android-volley
2个回答
0
投票

[当您使用Volley时,RequestQueue将使您的请求在工作线程上排队,然后将响应传递到主线程。之所以需要它,是因为如果您的应用程序面向Honeycomb SDK或更高版本,则不允许在主线程上执行网络操作。因此,您将不会得到NetworkOnMainThreadException


0
投票

Volley使用两个类,RequestQueue和Request

RequestQueue是所有必须排队执行的请求的地方,它还管理工作线程并在后台保持网络通话它也处理读写缓存以及解析响应并将解析后的响应传递到主线程。

请求是构建网络请求的地方。请求对象有3个主要请求:

    1. JSON请求

JsonObjectRequest —在给定URL上检索JSONObject响应主体的请求。JsonArrayRequest —用于从服务器检索JSON数组。

请求接受3个传递给构造函数的参数。

  1. 请求方法类型(GET,POST,PUT ...)。
  2. 所需对象的资源URL。
  3. ResponseListener,其回调方法包含响应。
  4. 与请求发生错误的回调方法的ErrorListener(提供的错误代码和可选的用户可读信息。)>
  5. 同时实现JsonObjectRequest和JsonArrayRequest的代码段如下:

 String mJSONURLString= "json_url";
   JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, mJSONURLString, null,
           new Response.Listener<JSONObject>() {
               @Override
               public void onResponse(JSONObject response) {

               }
           },
           new Response.ErrorListener() {
               @Override
               public void onErrorResponse(VolleyError error) {

               }
           });
   //add JsonObjectRequest request to queue
   requestQueue.add(jsonObjectRequest);

   JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null,
           new Response.Listener<JSONArray>() {
               @Override
               public void onResponse(JSONArray response) {

               }
           },
           new Response.ErrorListener() {
               @Override
               public void onErrorResponse(VolleyError error) {

               }
           });
   //add JsonArrayRequest to queue
   requestQueue.add(jsonArrayRequest);
  1. StringRequest —从服务器检索响应主体作为String。

  • 方法类型(GET,POST,...)。
  • 资源URL。
  • 事件监听器。

代码段如下:

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
        new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        // Do something with the response
    }
},
  1. ImageRequest-要从服务器接收图像,网络调用的结构与其他网络请求类似。

代码段如下:

   String mImageURLString= "";
   ImageRequest imageRequest = new ImageRequest(mImageURLString= , new Response.Listener<Bitmap>() {
       @Override
       public void onResponse(Bitmap response) {
           // Assign the response to an ImageView
           ImageView imageView = (ImageView) findViewById(R.id.imageView);
           imageView.setImageBitmap(response);
       }
   }, 0,0, null);//Image width,Image height
   //add request to queue
   requestQueue.add(imageRequest);
© www.soinside.com 2019 - 2024. All rights reserved.