私は andengine を使用してゲームを開発しているので、BaseGameActivity からメイン アクティビティを拡張しています。SceneManager も実装しました。SceneManager 内から、「Activity」(BaseGameActivity ではない) を拡張するクラスを呼び出したいです。次のコードを使用して、SceneManager からクラスを呼び出しています。
class MainActivity extends BaseGameActivity
{
// code
// implemented SceneManager
}
class SceneManager
{
BaseGameActivity activity;
public void showFbActivity()
{
activity.startActivity(new Intent(activity, FbConnect.class)); // Error line
}
}
class MainMenuScene
{
public boolean onMenuItemClicked(MenuScene pMenuScene, IMenuItem pMenuItem,
float pMenuItemLocalX, float pMenuItemLocalY) {
// TODO Auto-generated method stub
// return false;
switch(pMenuItem.getID())
{
case MENU_PLAY:
SceneManager.getInstance().loadGameScene(engine);
return true;
case MENU_OPTIONS:
SceneManager.getInstance().showFbActivity();
return true;
default:
return false;
}
}
}
class FbConnect extends Activity
{
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
今私の問題は、上記の行で nullpointerexception が発生していることです (コメント付きのコードを参照)。
以下は私のlogcat出力で、上記のコードのコメント行はSceneManagerの行番号118です。
09-14 22:52:32.035: E/AndroidRuntime(22385): FATAL EXCEPTION: UpdateThread
09-14 22:52:32.035: E/AndroidRuntime(22385): java.lang.NullPointerException
09-14 22:52:32.035: E/AndroidRuntime(22385): at android.content.ComponentName.<init>(ComponentName.java:75)
09-14 22:52:32.035: E/AndroidRuntime(22385): at android.content.Intent.<init>(Intent.java:2857)
09-14 22:52:32.035: E/AndroidRuntime(22385): at com.sohi.tech.rollball.SceneManager.showFbActivity(SceneManager.java:118)
09-14 22:52:32.035: E/AndroidRuntime(22385): at com.sohi.tech.rollball.MainMenuScene.onMenuItemClicked(MainMenuScene.java:93)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.entity.scene.menu.MenuScene.onAreaTouched(MenuScene.java:139)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.entity.scene.Scene.onAreaTouchEvent(Scene.java:413)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:357)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.entity.scene.CameraScene.onSceneTouchEvent(CameraScene.java:64)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.entity.scene.Scene.onChildSceneTouchEvent(Scene.java:420)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:338)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.engine.Engine.onTouchScene(Engine.java:452)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.engine.Engine.onTouchEvent(Engine.java:438)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.input.touch.controller.BaseTouchController$TouchEventRunnablePoolItem.run(BaseTouchController.java:102)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:54)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:1)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.util.adt.pool.PoolUpdateHandler.onUpdate(PoolUpdateHandler.java:88)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.input.touch.controller.BaseTouchController.onUpdate(BaseTouchController.java:62)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.engine.Engine.onUpdate(Engine.java:584)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.engine.LimitedFPSEngine.onUpdate(LimitedFPSEngine.java:56)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.engine.Engine.onTickUpdate(Engine.java:548)
09-14 22:52:32.035: E/AndroidRuntime(22385): at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)