2016-04-29 28 views
0

私はアンドロイドゲームに問題があります。私はAsyncTaskを使用し、onProgressUpdateではアクティビティクラスからStaticメソッドを呼び出します。このような何か:Android onProgressUpdateはstaticメソッドしか呼び出せませんか?

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

そして私は、例えばゲームのステータスをupate他のいくつかの非静的メソッドを呼び出す必要refreshGame onlineGameActivity方法で:

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'を開始したアクティビティへの参照が必要です。あなたのタスクが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]); 
    } 
} 
関連する問題