2016-04-29 12 views
0

Ich habe ein Problem in meinem Android-Spiel. Ich benutze AsyncTask und in OnProgressUpdate ich statische Methode aus der Aktivitätsklasse aufrufen. Etwas wie folgt aus:Android onProgressUpdate kann nur statische Methode aufrufen?

protected void onProgressUpdate(Message... values) { 
    super.onProgressUpdate(values); 
    OnlineGameActivity.refreshGame(values[0]); 
} 

Und dann in onlineGameActivity Methode refreshGame ich einige andere nicht-statische Methode aufrufen müssen, das Spiel Status zum Beispiel upate:

public class OnlineGameActivity extends Activity { 

    public static void refreshGame(Message message) { 
     switch (message.getType()) { 
      case 1: 
       methode1(); 
       break; 
      case 2: 
       methode2(); 
       break; 
      case 3: 
       methode3(); 
       break; 
} 

Es ist möglich, so etwas tun?

+0

Sie müssen entweder die Methoden machen Sie anrufen statisch, oder irgendwie einen Verweis auf eine Instanz hinzufügen und es statisch machen, oder übergeben Sie eine Instanz an das Objekt, in dem sich die Methoden in der 'onProgressUpdate' Methode befinden – Austin

+0

Sie können dort keine' statischen' Methoden verwenden, da Sie nichts Nützliches mit ihnen machen können. Sie benötigen einen Verweis auf die Aktivität, die diese AsyncTask gestartet hat. Wenn Ihre Aufgabe außerhalb der Aktivität definiert ist, wie zum Beispiel http://stackoverflow.com/a/5523637 – zapl

Antwort

1

Ja. Sie können eine os.Handler Instanz an Ihre AsyncTask übergeben und dann eine leere Nachricht an sie senden. Etwas ähnlich der folgenden:

public class OnlineGameActivity extends Activity { 

    Handler myHandler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 

      switch (msg.what) { 

       case 0: 
        ... 
        break; 

       ... 
      } 
     } 
    } 

    public OnlineGameActivity(...) { 
     ... 

     YourAsyncTask task = new YourAsyncTask(myHandler); 
     task.execute(); 
    } 
} 

und Ihre AsyncTask:

public class YourAsyncTask extends AsyncTask<...> { 

    Handler myHandler; 

    public YourAsyncTask(Handler myHandler) { 
     this.myHandler = myHandler; 
    } 

    ... 

    @Override 
    protected void onProgressUpdate(Message... values) { 
     myHandler.sendEmptyMessage(values[0]); 
    } 
} 
Verwandte Themen