2011-07-21 16 views
5

Estoy tratando de entender el mecanismo del controlador de devolución de llamada. ¿Cómo se invoca el método handle()? ¿Alguien puede dar un ejemplo de uso de controlador de devolución de llamada personalizado (que no sean los utilizados en los Módulos de inicio de sesión de JASS más o menos) en la aplicación no Swing?Custom Callback Handler

Respuesta

9

Defina una interfaz para manejar la devolución de llamada.

public interface ServiceListener<T> { 
    void callback(T result); 
} 

Defina un método que toma ServiceListener como parámetro y devuelve vacío.

Public void runInBackground(ServiceListener listener) { 
    ...code that runs in the background... 
    listener.callback(...data to return to caller...); 
} 

Y ahora puede hacerlo desde su código principal:

runInBackground(new ServiceListener() { 


     @Override 
     public void callback(..returned data...) { 
      ...Do stuff with returned data... 
     } 
}); 
+0

Necesito uno o dos ejemplos concretos. ¿Puedes elaborar un poco? – Partha

+0

¿Puedo darle un ejemplo de Android si eso fuera de alguna ayuda? – slott

+0

@slott: ¡Sí, por favor! – Zolomon

3

Este es un ejemplo básico para la solicitud de datos de un servidor web utilizando el AsyncTask desde una aplicación Android.

Primero defina la clase async. Tenga en cuenta que el constructor toma un oyente que usamos para publicar el resultado una vez listo.

public class Webservice extends AsyncTask<String, Void, String> { 
    private DialogListener dialogListener; 

    public Webservice(final DialogListener dialogListener) { 
     this.dialogListener = dialogListener; 
    } 

    @Override 
    protected String doInBackground(final String... strings) { 
     // We cant trigger onComplete here as we are not on the GUI thread! 
     return ""; 
    } 

    protected void onPostExecute(final String result) { 
     dialogListener.onComplete(result); 
    } 
} 

clase de servidor básico para el manejo de varias comunicaciones de red:

public class Server { 
    public void queryServer(final String url, final DialogListener service) { 
     // Simulate slow network... 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     new Webservice(service).execute(url); 
    } 
} 

Ahora podemos utilizar este código dentro de nuestra actividad sin tener que preocuparse por la duración de la llamada toma, ya que no se va a detener la GUI como se ejecuta como sincronización.

Server s = new Server(); 

     // Async server call. 
     s.queryServer("http://onto.dk/actions/searchEvents.jsp?minLatE6=55640596&minLngE6=12078516&maxLatE6=55642654&maxLngE6=12081948", new DialogListener() { 
     @Override 
     public void onComplete(final String result) { 
      toast("complete"); 
     } 

     @Override 
     public void onError() { 
      toast("error"); 
     } 
    });