2016-04-29 36 views
0

我在我的Android遊戲中遇到問題。我使用AsyncTask,並在onProgressUpdate中從活動類調用靜態方法。事情是這樣的:Android onProgressUpdate只能調用靜態方法嗎?

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

然後在onlineGameActivity方法refreshGame我需要調用哪些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; 
} 

有可能做這樣的事情?

+0

要麼你需要做的方法,你在呼喚靜態的,或者以某種方式添加引用實例,並使其靜態,或者將實例傳遞給方法在'onProgressUpdate'方法中的對象 – Austin

+0

你不能在那裏使用'static'方法,因爲你不能對它們做任何有用的事情。你需要引用啓動這個'AsyncTask'的Activity。例如,如果您的任務在活動外部定義,例如http://stackoverflow.com/a/5523637 – zapl

回答

1

是的。您可以將os.Handler實例傳遞給AsyncTask,然後向其發送空的消息。一些類似以下內容:

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

和你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]); 
    } 
}