2013-07-24 35 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 
       } 
      }); 
     } 

    }; 
}