2

SurfaceViewを拡張する私のクラスGameView.classから新しいアクティビティを開始しようとしています。これで(Stackoverflowでここにあります):

Context context = GameView.this.getContext();
context.startActivity(new Intent(context, ScoreScreen.class));

別のスレッドから呼び出されるメソッドに入れました。トリガーされると、アプリがフリーズします。私はそれをonTouchイベントに直接入れてみました(ゲーム全体をスキップしてより速くテストするため)、そしてそれはすべて一緒にクラッシュします:

11-27 08:00:00.430: W/dalvikvm(1772): threadid=12: thread exiting with uncaught exception (group=0x41e7b300)
11-27 08:00:00.430: E/AndroidRuntime(1772): FATAL EXCEPTION: Thread-598
11-27 08:00:00.430: E/AndroidRuntime(1772): java.lang.NullPointerException
11-27 08:00:00.430: E/AndroidRuntime(1772):     at com.tricky.puzzlepoker.GameView.onDraw(GameView.java:173)
11-27 08:00:00.430: E/AndroidRuntime(1772):     at com.tricky.puzzlepoker.MainThread.run(MainThread.java:38)
11-27 08:00:02.505: I/Process(1772): Sending signal. PID: 1772 SIG: 9

もう何をしたらいいのかわからないので、助けが必要です!

4

1 に答える 1

1

SurfaceView クラスは View から拡張され、onCreate() メソッドはありません。ただし、コンストラクターには、GameView オブジェクトを作成するときに無視しなければならないコンテキストが必要です。したがって、後でこのクラスで使用するために、コンテキストをグローバル変数に保存することをお勧めします。

   private class GameView extends SurfaceView {
     private Context mContext;
     ...
     public GameView(Context context, AttributeSet attrs, int defStyle){
       super(context, attrs, defStyle);
       this.mContext = context;
       ...
     }
     ...
    }

それ以外の場合は、次のように GameView クラスの他の場所でコンテキストを取得できます。

    mContext = getContext();

このコンテキストを使用すると、後でアクティビティを開始できます。

    Intent intent = new Intent(mContext, ScoreScreen.class);
    mContext.startActivity(intent);
于 2012-11-27T12:34:46.497 に答える