Biblioteca Volley en Android

Volley es una biblioteca HTTP que hace que la creación de redes sea muy fácil y rápida para las aplicaciones de Android. Fue desarrollado por Google y presentado durante Google I/O 2013. Fue desarrollado debido a la ausencia en el SDK de Android de una clase de red capaz de funcionar sin interferir con la experiencia del usuario. Aunque Volley es parte del Proyecto de código abierto de Android (AOSP), Google anunció en enero de 2017 que Volley se trasladará a una biblioteca independiente. Administra el procesamiento y el almacenamiento en caché de las requests de red y ahorra a los desarrolladores un tiempo valioso al escribir el mismo código de llamada/caché de red una y otra vez. Volley no es adecuado para grandes operaciones de descarga o transmisión, ya que Volley mantiene todas las respuestas en la memoria durante el análisis. Características de Volley:

  1. Solicitud de cola y priorización
  2. Gestión eficaz de memoria y caché de requests
  3. Extensibilidad y personalización de la biblioteca a nuestras necesidades
  4. Cancelando las requests

Ventajas de usar Volley

  1. Todas las tareas que deben realizarse con Networking en Android se pueden realizar con la ayuda de Volley.
  2. Programación automática de requests de red.
  3. Atrapando
  4. Múltiples conexiones de red simultáneas.
  5. Cancelando API de solicitud.
  6. Priorización de requests.
  7. Volley proporciona herramientas de depuración y rastreo.

Cómo importar Volley y agregar permisos

Antes de comenzar con Volley, es necesario importar Volley y agregar permisos en el Proyecto Android. Los pasos para hacerlo son los siguientes:

Crear un nuevo proyecto. Abra build.gradle (Módulo: aplicación) y agregue la siguiente dependencia:

dependencies{ 
    //...
    implementation 'com.android.volley:volley:1.0.0'
}

En AndroidManifest.xml agregue el permiso de Internet:

<uses-permission android:name="android.permission.INTERNET" />

Clases en Volley Biblioteca

Volley tiene dos clases principales:

  1. Cola de requests: Es el interés que se utiliza para enviar requests a la red. Se puede hacer una cola de solicitud a pedido si es necesario, pero generalmente se crea temprano, en el momento del inicio, y se mantiene y se usa como Singleton.
  2. Solicitud: toda la información necesaria para realizar llamadas a la API web se almacena en él. Es la base para crear requests de red (GET, POST).

Tipos de solicitud usando Volley Library

Solicitud de string 

Java

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);
</pre>

Solicitud de objeto JSON 

Java

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);

Solicitud de array JSON 

Java

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);

Solicitud de imagen 

Java

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);

Agregar parámetros de publicación

Java

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);

Adición de encabezados de solicitud 

Java

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);

Manejo de la caché Volley 

Java

// 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</strong>
AppController.getInstance()
    .getRequestQueue()
    .getCache()
    .remove(url);
 
// Deleting all the cache
AppController.getInstance()
    .getRequestQueue()
    .getCache()
    .clear(url);

Solicitud de cancelación 

Java

// Cancel single request
String tag_json_arry = "json_req";
 
ApplicationController.getInstance()
    .getRequestQueue()
    .cancelAll("feed_request");
 
// Cancel all request
ApplicationController.getInstance()
    .getRequestQueue()
    .cancelAll();

Priorización de requests 

Java

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;
        }
 
    };

Publicación traducida automáticamente

Artículo escrito por vartika02 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *