2016-04-29 3 views
0

У меня проблема в моей игре для Android. Я использую AsyncTask, и в onProgressUpdate я вызываю метод Static из класса активности. Что-то вроде этого: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' там, потому что вы не можете ничего с ними поделать. Вам нужно иметь ссылку на Activity, которая запустила эту «AsyncTask». Если ваша задача определена вне действия, например, 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]); 
    } 
} 
Смежные вопросы