2016-04-29 46 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]); 
    } 
}