2013-07-24 57 views
1

我創建了一些活動和不同的場景。現在我想用Scene Manager將它們全部合併。 但我遇到了問題 java.lang.RuntimeException:無法在未調用Looper.prepare()的線程中創建處理程序,因爲我使用了處理程序。 任何人都可以爲我提供快速解決方案嗎? 應該使用哪種機制來從分離的類/活動中創建場景管理器?Andengine場景管理器和處理程序

具體來說:我不能在我的嵌套類中使用處理程序。很抱歉,這變成了Java問題,而不僅僅是Andengine。

public class MainActivity extends BaseGameActivity 
    { 

    public static class SceneManager1 { 

    public static Handler handlerAchievementOwl = new Handler(){ 
     @Override 
      public void handleMessage(Message msg){ 
      Log.i("Peakpeak","Peak inside Handler"); 
      } 

    }; 
    } 

    } 
+2

'yourActivityContext.runOnUiThread(新的Runnable(...));' –

+0

EG。爲PhysicsHandler也?我知道我可以使用runOnUiThread(new Runnable(...))在UI線程中工作,但我沒有嘗試,因爲我想知道是否有更好的解決方案。即使這樣做,代碼也會很混亂,因爲我使用了很多處理程序以及PhysicsHandler。 – user2322339

+0

凌亂的代碼?重構! –

回答

0

既然你在一個靜態類需要context(我不知道,如果你的MainActivitycontext,但我敢肯定它的地方),你可以這樣做:

public class MainActivity extends BaseGameActivity 
{ 
    private static Context context; 

    protected void onCreate(){ 
     super.onCreate(); 

     MainActivity.context = getApplicationContext(); 
    } 

    public static class SceneManager1 { 

     public static Handler handlerAchievementOwl = new Handler(){ 
      @Override 
      public void handleMessage(Message msg){ 
       Log.i("Peakpeak", "Peak inside Handler"); 

       ((Activity)MainActivity.context).runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         //do your magic 
        } 
       }); 
      } 

     }; 
    } 

} 
2

試試這個代碼:

public class MainActivity extends BaseGameActivity 
{ 
private static Activity thisActivity; 

protected void onCreate(){ 
    super.onCreate(); 
    thisActivity = this; 
} 

public static class SceneManager1 { 

    public static Handler handlerAchievementOwl = new Handler(){ 
     @Override 
     public void handleMessage(Message msg){ 
      Log.i("Peakpeak", "Peak inside Handler"); 

thisActivity .runOnUpdateThread(new Runnable() { 
       @Override 
       public void run() { 
        //do your magic 
       } 
      }); 
     } 

    }; 
}