为什么我们要在 android 中使用 RequestQueue?

Why should we use RequestQueue in android?

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

enter image description here

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

Volley使用了两个类,RequestQueue和Request

RequestQueue 是所有必须执行的请求排队的地方, 它还管理工作线程 并在后台维护网络通话 它还处理读取和写入缓存 并解析响应并将解析后的响应传递给主线程。

Request是网络请求所在constructed.The请求对象有3个主要请求:

  1. JSON 请求

JsonObjectRequest — 在给定 URL 处检索 JSON 对象响应正文的请求 .
JsonArrayRequest — 用于从服务器检索 JSON 数组。

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

  1. 请求方法类型(GET,POST,PUT...)。
  2. 所需对象的资源 URL。
  3. 回调方法包含响应的ResponseListener。
  4. 请求时出现回调方法错误的ErrorListener(提供错误代码和可选的用户可读)。

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 — 从服务器检索作为字符串的响应主体。

    • 方法类型(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);