Uso de Volley con adaptador de sincronización
He buscado mucho sobre esto pero no puedo encontrar ninguna solución. He estado usando Volley durante mucho tiempo para manejar mi comunicación de red. Recientemente he decidido utilizar un SyncAdapter
para sincronizar mis datos con el servidor. Dentro del método onPerformSync()
, pensé que voy a utilizar Volley para enviar los datos al servidor como su muy fácil con Volley para hacer GET, POST solicitudes.
Problema – SyncAdapter
y Volley usan sus propios hilos separados. Por lo tanto, cuando inicie una solicitud de Volley desde el interior del método onPerformSync()
, SyncAdapter
no espera que la solicitud de Volley se complete y termine la sincronización antes de que se onResponse()
la onResponse()
o onErrorResponse()
. Necesito realizar más llamadas de red dentro del SyncAdapter
después de que la primera llamada vuelva correctamente.
- Ejemplo de comunicación con HandlerThread
- Realizando operaciones de larga duración en onDestroy
- "Hilo ya iniciado" al reanudar la actividad
- Handler.sendMessageDelayed (msg, delay) no funciona correctamente
- La interfaz de usuario de Espresso se ejecuta cuando ejecuto una sola prueba, pero falla cuando ejecuto un conjunto de pruebas
Ejemplo de código –
@Override public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) { JsonObjectRequest jReq = new JsonObjectRequest(Method.POST, url, data, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.i(TAG, "response = " + response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "error = " + error.getMessage()); } }); AppController.getInstance().addToRequestQueue(jReq); //onPerformSync() exits before request finished }
Pregunta – Entonces, ¿cómo puedo hacer que el SyncAdapter
esperar hasta que la respuesta de la red es recibida por Volley?
- Android: ejecuta un hilo repetidamente dentro de un temporizador
- Retardo de tiempo en Android
- Acceso multiproceso y caché variable de subprocesos
- Error de acceso de realm de subproceso incorrecto al usar código compartido entre IntentService y AsyncTask (Android)
- Descargar imagen de Android desde el servidor y guardar en sdcard sin utilizar BitmapFactory
- Cancelar ProgressDialog y detener el hilo
- Quiero crear thread temporizador para Android con Xamarin
- Hacer un mensaje Toast de un hilo independiente
Hacer una petición de volea sincrónica.
RequestFuture<JSONObject> future = RequestFuture.newFuture(); JsonObjectRequest request = new JsonObjectRequest(URL, null, future, future); requestQueue.add(request);
Y luego usar:
try { JSONObject response = future.get(); // this will block (forever) } catch (InterruptedException e) { // exception handling } catch (ExecutionException e) { // exception handling }
Código de: ¿Puedo hacer una solicitud síncrona con volea?
- ¿Dónde obtener streaming (en directo) de vídeo y audio desde una aplicación de ejemplo de cámara para Android?
- Recepción del cuerpo de respuesta en Retrofit2 pero onResponse no se recibe