2011-07-21 28 views
5

Geri çağrı işleyicisinin mekanizmasını anlamaya çalışıyorum. Handle() yöntemi nasıl çağrılır? Swing uygulamasında özel geri arama işleyicisinin (JASS Giriş Modüllerinde kullanılanlar dışında) kullanımıyla ilgili bir örnek verilebilir mi?Özel Geri Çağırma İşleyicisi

cevap

9

Geri arama işlemek için bir arabirim tanımlayın.

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

ServiceListener'ı parametre olarak alan ve geçersiz değer döndüren bir yöntem tanımlayın.

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

Ve artık ana koddan yapabilirsiniz:

runInBackground(new ServiceListener() { 


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

Bir veya iki somut örneğe ihtiyacım var. Biraz detaylandırır mısın? – Partha

+0

Eğer herhangi bir yardım olursa, size bir Android örneği verebilirim? – slott

+0

@slott: Evet lütfen! – Zolomon

3

Bu bir Android uygulamasından AsyncTask kullanarak bir web sunucusu bilgilerini talep etmek için temel bir örnektir.

İlk önce async sınıfını tanımlayın. Yapıcının, sonucu bir kez yayınlamak için kullandığımız bir dinleyici aldığını unutmayın. o GUI durdurmak için gitmiyor olarak çağrı ne kadar sürdüğünü endişe duymadan

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

Biz şimdi bizim faaliyeti içinde bu kodu kullanabilirsiniz: çeşitli ağ iletişim sağlamak üzere

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

Temel sunucu sınıfı async çalıştırıldığı gibi.

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"); 
     } 
    }); 
İlgili konular