📜  Android 中的排球库

📅  最后修改于: 2022-05-13 01:58:11.628000             🧑  作者: Mango

Android 中的排球库

Volley是一个HTTP 库,它使 Android 应用程序的网络变得非常容易和快速。它由 Google 开发并在 2013 年 Google I/O 期间推出。它的开发是因为 Android SDK 中缺少能够在不干扰用户体验的情况下工作的网络类。尽管 Volley 是 Android 开源项目 (AOSP) 的一部分,但谷歌在 2017 年 1 月宣布,Volley 将转移到一个独立的库中。它管理网络请求的处理和缓存,并为开发人员一次又一次地编写相同的网络调用/缓存代码节省了宝贵的时间。

Volley不适合大型下载或流媒体操作,因为 Volley 在解析过程中将所有响应保存在内存中。

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!

排球的特点:

  1. 请求排队和优先级
  2. 有效的请求缓存和内存管理
  3. 库的可扩展性和自定义以满足我们的需求
  4. 取消请求

使用 Volley 的优点:



  1. 所有需要在 Android 中使用 Networking 完成的任务,都可以在 Volley 的帮助下完成。
  2. 网络请求的自动调度。
  3. 捕捉
  4. 多个并发网络连接。
  5. 取消请求 API。
  6. 请求优先级。
  7. Volley 提供调试和跟踪工具。

如何导入 Volley 并添加权限:

在开始使用 Volley 之前,需要在 Android 项目中导入 Volley 并添加权限。步骤如下:

  1. 创建新项目。
  2. 打开build.gradle(Module: app)并添加以下依赖项:
    dependencies{ 
        //...
        implementation 'com.android.volley:volley:1.0.0'
    }
    
  3. AndroidManifest.xml中添加互联网权限:

Volley 图书馆的课程:

Volley 有两个主要类:

  1. 请求队列:这是一种用于将请求分派到网络的兴趣。如果需要,可以按需创建请求队列,但通常它是在启动时早期创建的,并将其保留并用作单例。
  2. 请求:所有进行 Web API 调用所需的信息都存储在其中。它是创建网络请求(GET、POST)的基础。

使用 Volley 库的请求类型:

  1. 字符串请求
    String url = "https:// string_url/";
    StringRequest
        stringRequest
        = new StringRequest(
            Request.Method.GET,
            url,
            new Response.Listener() {
                @Override
                public void onResponse(String response)
                {
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error)
                {
                }
            });
    requestQueue.add(stringRequest);
    
  2. JSONObject 请求
    String url = "https:// json_url/";
    JsonObjectRequest
        jsonObjectRequest
        = new JsonObjectRequest(
            Request.Method.GET,
            url,
            null,
            new Response.Listener() {
                @Override
                public void onResponse(JSONObject response)
                {
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error)
                {
                }
            });
    requestQueue.add(jsonObjectRequest);
    
  3. JSONArray 请求
    JsonArrayRequest
        jsonArrayRequest
        = new JsonArrayRequest(
            Request.Method.GET,
            url,
            null,
            new Response.Listener() {
                @Override
                public void onResponse(JSONArray response)
                {
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error)
                {
                }
            });
    requestQueue.add(jsonArrayRequest);
    
  4. 图片请求
    int max - width = ...;
    int max_height = ...;
      
    String URL = "http:// image_url.png";
      
    ImageRequest
        imageRequest
        = new ImageRequest(URL,
                           new Response.Listener() {
                               @Override
                               public void
                               onResponse(Bitmap response)
                               {
                                   // Assign the response
                                   // to an ImageView
                                   ImageView
                                       imageView
                                       = (ImageView)
                                           findViewById(
                                               R.id.imageView);
      
                                   imageView.setImageBitmap(response);
                               }
                           },
                           max_width, max_height, null);
      
    requestQueue.add(imageRequest);
    
  5. 添加帖子参数
    String tag_json_obj = "json_obj_req";
      
    String
        url
        = "https:// api.xyz.info/volley/person_object.json";
      
    ProgressDialog pDialog = new ProgressDialog(this);
    pDialog.setMessage("Loading...PLease wait");
    pDialog.show();
      
    JsonObjectRequest
        jsonObjReq
        = new JsonObjectRequest(
            Method.POST,
            url,
            null,
            new Response.Listener() {
      
                @Override
                public void onResponse(JSONObject response)
                {
                    Log.d(TAG, response.toString());
                    pDialog.hide();
                }
            },
            new Response.ErrorListener() {
      
                @Override
                public void onErrorResponse(VolleyError error)
                {
                    VolleyLog.d(TAG, "Error: "
                                         + error.getMessage());
                    pDialog.hide();
                }
            }) {
      
              @Override
              protected Map getParams()
              {
                  Map params = new HashMap();
                  params.put("name", "Androidhive");
                  params.put("email", "abc@androidhive.info");
                  params.put("password", "password123");
      
                  return params;
              }
      
          };
      
    AppController.getInstance()
        .addToRequestQueue(jsonObjReq, tag_json_obj);
    
  6. 添加请求头
    String tag_json_obj = "json_obj_req";
      
    String
        url
        = "https:// api.androidhive.info/volley/person_object.json";
      
    ProgressDialog pDialog = new ProgressDialog(this);
    pDialog.setMessage("Loading...");
    pDialog.show();
      
    JsonObjectRequest
        jsonObjReq
        = new JsonObjectRequest(
            Method.POST,
            url,
            null,
            new Response.Listener() {
      
                @Override
                public void onResponse(JSONObject response)
                {
                    Log.d(TAG, response.toString());
                    pDialog.hide();
                }
            },
            new Response.ErrorListener() {
      
                @Override
                public void onErrorResponse(VolleyError error)
                {
                    VolleyLog.d(TAG, "Error: "
                                         + error.getMessage());
                    pDialog.hide();
                }
            }) {
      
              @Override
              public Map getHeaders() throws AuthFailureError
              {
                  HashMap headers = new HashMap();
                  headers.put("Content-Type", "application/json");
                  headers.put("apiKey", "xxxxxxxxxxxxxxx");
                  return headers;
              }
      
          };
      
    AppController.getInstance()
        .addToRequestQueue(jsonObjReq, tag_json_obj);
    
  7. 处理 Volley 缓存
    // Loading request from cache
    Cache
        cache
        = AppController.getInstance()
              .getRequestQueue()
              .getCache();
      
    Entry entry = cache.get(url);
    if (entry != null) {
        try {
            String
                data
                = new String(entry.data, "UTF-8");
            // handle data, like converting it
            // to xml, json, bitmap etc.,
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
    }
    else
    {
        // If cached response doesn't exists
    }
      
    // Invalidate cache
    AppController.getInstance()
        .getRequestQueue()
        .getCache()
        .invalidate(url, true);
      
    // Turning off cache
    // String request
    StringRequest
        stringReq
        = new StringRequest(....);
      
    // disable cache
    stringReq.setShouldCache(false);
      
    // Deleting cache for particular cache
    AppController.getInstance()
        .getRequestQueue()
        .getCache()
        .remove(url);
      
    // Deleting all the cache
    AppController.getInstance()
        .getRequestQueue()
        .getCache()
        .clear(url);
    
  8. 取消请求
    // Cancel single request
    String tag_json_arry = "json_req";
      
    ApplicationController.getInstance()
        .getRequestQueue()
        .cancelAll("feed_request");
      
    // Cancel all request
    ApplicationController.getInstance()
        .getRequestQueue()
        .cancelAll();
    
  9. 请求优先级
    private Priority priority = Priority.HIGH;
      
    StringRequest
        strReq
        = new StringRequest(
            Method.GET,
            Const.URL_STRING_REQ,
            new Response
                .Listener() {
       
                        @Override
                        public void onResponse(String response) {
      
                            Log.d(TAG, response.toString());
                            msgResponse.setText(response.toString());
                            hideProgressDialog();
       
                        } },
            new Response
                .ErrorListener() {
       
                        @Override
                        public void 
                        onErrorResponse(VolleyError error) {
      
                            VolleyLog.d(TAG, 
                                        "Error: " 
                                            + error.getMessage());
                            hideProgressDialog();
                        } }) {
      
              @Override
              public Priority getPriority()
              {
                  return priority;
              }
      
          };