Android 中的排球库
Volley是一个HTTP 库,它使 Android 应用程序的网络变得非常容易和快速。它由 Google 开发并在 2013 年 Google I/O 期间推出。它的开发是因为 Android SDK 中缺少能够在不干扰用户体验的情况下工作的网络类。尽管 Volley 是 Android 开源项目 (AOSP) 的一部分,但谷歌在 2017 年 1 月宣布,Volley 将转移到一个独立的库中。它管理网络请求的处理和缓存,并为开发人员一次又一次地编写相同的网络调用/缓存代码节省了宝贵的时间。
Volley不适合大型下载或流媒体操作,因为 Volley 在解析过程中将所有响应保存在内存中。
想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!
排球的特点:
- 请求排队和优先级
- 有效的请求缓存和内存管理
- 库的可扩展性和自定义以满足我们的需求
- 取消请求
使用 Volley 的优点:
- 所有需要在 Android 中使用 Networking 完成的任务,都可以在 Volley 的帮助下完成。
- 网络请求的自动调度。
- 捕捉
- 多个并发网络连接。
- 取消请求 API。
- 请求优先级。
- Volley 提供调试和跟踪工具。
如何导入 Volley 并添加权限:
在开始使用 Volley 之前,需要在 Android 项目中导入 Volley 并添加权限。步骤如下:
- 创建新项目。
- 打开build.gradle(Module: app)并添加以下依赖项:
dependencies{ //... implementation 'com.android.volley:volley:1.0.0' }
- 在AndroidManifest.xml中添加互联网权限:
Volley 图书馆的课程:
Volley 有两个主要类:
- 请求队列:这是一种用于将请求分派到网络的兴趣。如果需要,可以按需创建请求队列,但通常它是在启动时早期创建的,并将其保留并用作单例。
- 请求:所有进行 Web API 调用所需的信息都存储在其中。它是创建网络请求(GET、POST)的基础。
使用 Volley 库的请求类型:
- 字符串请求
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);
- 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);
- 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);
- 图片请求
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);
- 添加帖子参数
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);
- 添加请求头
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);
- 处理 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);
- 取消请求
// Cancel single request String tag_json_arry = "json_req"; ApplicationController.getInstance() .getRequestQueue() .cancelAll("feed_request"); // Cancel all request ApplicationController.getInstance() .getRequestQueue() .cancelAll();
- 请求优先级
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; } };