volley tutorial studio jsonobjectrequest enviar ejemplo datos android request android-volley

tutorial - Android: cancela la solicitud de Volley



volley android tutorial (4)

Te sugiero que canceles las solicitudes agregadas en el método onPause (). Considerando:

onPause () El sistema llama a este método como la primera indicación de que el usuario abandona su actividad (aunque no siempre significa que la actividad se está destruyendo). Por lo general, esto es donde debe confirmar los cambios que deben mantenerse más allá de la sesión de usuario actual (porque es posible que el usuario no regrese). fuente: Desarrolladores de Android

Estoy usando Android Volley lib en mi proyecto para ejecutar solicitudes de red, todo funciona muy bien, pero tengo algunos problemas con la función "cancelar" de esta lib. Explico mi problema ...

Tengo una actividad, donde estoy ejecutando la solicitud en el método OnCreate , se llama a la solicitud, no hay problema. Pero para estar seguro de que el método de cancel funciona, quería probar y probar dos cosas:

  1. Disparo mi pedido y justo después de cancelarlo así:

    MySingleton.getMyData("urltocall", getDataListener, requestTag); MySingleton.getRequestQueue().cancelAll(requestTag);

¡Este funciona! Se llama a la cancelación (puedo verla también en la clase Solicitud de Voley):

public void cancel() { mCanceled = true; // my breakpoint is called here }

  1. onDestroy mi solicitud y justo después de llamar al método finish () de mi actividad y en el onDestroy y / o onStop de la actividad, estoy llamando al mismo código:

    MySingleton.getMyData("urltocall", getDataListener, requestTag); MySingleton.getRequestQueue().cancelAll(requestTag);

¡Pero esto no funciona !

El requestTag no es nulo y pasó a Volley, por lo que no puedo entender por qué funciona el primer método, pero no el otro ... Sabiendo que mi propósito es cancelar la solicitud cuando se llama onDestroy .

Gracias por tu ayuda


https://developer.android.com/training/volley/simple.html#cancel

Esto básicamente dice que

Una vez cancelado, Volley garantiza que nunca se llamará a su controlador de respuesta.

Entonces, incluso si no hay forma de deshacer / cancelar una solicitud http que ya ha comenzado (lo cual tiene sentido), no se invocarán las devoluciones de llamada asociadas a la solicitud, lo que para mí significa que puedo tratar es una solicitud cancelada en la mayoría de los escenarios a pesar de que la respuesta así recibida en silencio podría estar disponible en la memoria caché.


RequestQueue que en el primer caso, la solicitud solo se ha agregado a RequestQueue , por lo que llamar a cancelAll() funciona. En el segundo caso, hay un ligero retraso entre el inicio de la solicitud y la pausa / destrucción de la Activity : en ese retraso, la solicitud HTTP ha comenzado. Es posible que no tenga en cuenta que llamar a cancelAll() solo funciona para aquellas solicitudes que todavía están en RequestQueue . No funciona para una solicitud HTTP que ya ha comenzado, no hay forma de detener eso.

Una vez dicho esto, la documentación aquí implica que una vez que se cancela una solicitud (es decir, al llamar a cancel() ), se puede tratar efectivamente como si nunca se hubiera llamado al servicio web en primer lugar. Las devoluciones de llamada asociadas con la solicitud particular no se invocarían (aunque la respuesta recibida probablemente se mantendría en la memoria caché local).


Puede cancelar una Request adjunta a un TAG . Entonces, básicamente, debes agregar una etiqueta con cada Request .

yourRequestObject.setTag(TAG);

RequestQueue mRequestQueue;

mRequestQueue.cancelAll(TAG);

De esta forma puede cancelar todas las Request con un TAG particular.