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.

ProblemaSyncAdapter 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 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?

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?

  • ¿Por qué los subprocesos nativos se comportan de forma diferente cuando la aplicación está en segundo plano?
  • Enfoque correcto de Android: ¿dónde se debe analizar la respuesta de JSON - en el subproceso de interfaz de usuario, o en otro?
  • Juegos de sincronización de Java: sincronizados && wait && notify
  • Android volátil no funciona?
  • Problema con la cámara androide y seguridad de hilo
  • Handler to Handler VERSUS Mensajería para Messenger en Android
  • Multiprocesamiento en Android
  • Cómo reducir la latencia de Thread.sleep () en Android
  • Confundido entre syncAdapter, servicios, cargadores, proveedores y asynctask?
  • IllegalArgumentException en StatFs en WebViewCore thread interno
  • ¿Cómo puedo asegurar que el controlador de otro hilo no sea nulo antes de llamarlo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.