-2

I programmed an easy Game in Android Studio. After game Over I want to switch to another Activity, but Intent doesn't work. Every time the app sends the error "unfortunalety stopped". I call the Intent in the onTouch Method when the Picture "donate" is pressed. I tried various combinations with context or with getApplicationContext() and so on. I surfed through various platforms, but I couln't fix the problem!

Thanks for your help!

Activity GamePlayScene

public class GamePlayScene extends Activity implements Scene {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

public  GamePlayScene()
{
    player = new RectPlayer(new Rect(100, 100, 200, 200), Color.rgb(255, 0, 0));
    playerPoint = new Point(Constants.SCREEN_WITH / 2, 7 * Constants.SCREEN_HEIGHT / 8); //Constants.SCREEN_WITH/2, 7*Constants.SCREEN_HEIGHT/8
    player.update(playerPoint);
    obstacleManager = new ObstacleManager(100, Constants.SCREEN_HEIGHT / 3, 100, Color.YELLOW);
    coinManager = new CoinManager(79, Constants.SCREEN_HEIGHT, 76, Color.YELLOW);
    gameState = 0;
    orientationData = new OrientationData();
    orientationData.register();
    frameTime = System.currentTimeMillis();
    up = false;
    wait = true;
    BitmapFactory bf = new BitmapFactory();
    restartButtonBitmap = bf.decodeResource(Constants.CURRENT_CONTEXT.getResources(), R.drawable.restartbutton);
    donateButtonBitmap = bf.decodeResource(Constants.CURRENT_CONTEXT.getResources(), R.drawable.donate);

}


public void reset() {
    playerPoint = new Point(Constants.SCREEN_WITH / 2, 7 * Constants.SCREEN_HEIGHT / 8);
    player.update(playerPoint);
    obstacleManager = new ObstacleManager(100, 2 * Constants.SCREEN_HEIGHT / 10, 100, Color.BLUE);
    coinManager = new CoinManager(79, Constants.SCREEN_HEIGHT, 76, Color.YELLOW);
    movingPlayer = false;
    konto = konto + muenzen;
    reset = true;
    speed = false;
    gameState = 0;
    muenzen = 0;
    count = 0;

}

@Override
public void receiveTouch(MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            float posX = event.getX();
            float posY = event.getY();

            float x1 = (Constants.SCREEN_WITH / 2) - (restartButtonBitmap.getWidth() / 2),
                    x2 = Constants.SCREEN_WITH / 2 + (restartButtonBitmap.getWidth() / 2),
                    y1 = Constants.SCREEN_HEIGHT / 2 - (restartButtonBitmap.getHeight() / 2),
                    y2 = Constants.SCREEN_HEIGHT / 2 + (restartButtonBitmap.getHeight() / 2);

            float x3 = (Constants.SCREEN_WITH / 2) - (donateButtonBitmap.getWidth() / 2),
                    x4 = Constants.SCREEN_WITH / 2 + (donateButtonBitmap.getWidth() / 2),
                    y3 = Constants.SCREEN_HEIGHT / 2 + restartButtonBitmap.getHeight() / 2 + 50 + donateButtonBitmap.getHeight() / 2,
                    y4 = Constants.SCREEN_HEIGHT / 2 + restartButtonBitmap.getHeight() / 2 + 50 + donateButtonBitmap.getHeight() / 2 +
                            donateButtonBitmap.getHeight();

            if (gameState == 0) {
                gameState++;
            }

            if (gameOver && (posX >= x1 && posX <= x2) && (posY >= y1 && posY <= y2)) {
                // we are in the square
                gameState = 2;

                //http://androidforums.com/threads/touch-event-on-image-made-on-canvas.210019/
            }


            if (!gameOver && gameState == 1) {
                movingPlayer = true;
                count++;
                start=true;
                if(count==1)
                {
                    jump();
                }

            }

            if (gameOver && (posX >= x3 && posX <= x4) && (posY >= y3 && posY <= y4)) {
                Intent intent = new Intent(GamePlayScene.this, UserLogin.class);
                startActivity(intent);


            }

            break;
        case MotionEvent.ACTION_MOVE:

            break;
        case MotionEvent.ACTION_UP:
            movingPlayer = false;
            up = false;
            break;
    }
}

@Override
public void draw(Canvas canvas) {
    canvas.drawColor(Color.WHITE);
    player.draw(canvas);
    obstacleManager.draw(canvas);
    coinManager.draw(canvas);

    if (gameOver) {
        canvas.drawBitmap(restartButtonBitmap, Constants.SCREEN_WITH / 2 - restartButtonBitmap.getWidth() / 2,
                Constants.SCREEN_HEIGHT / 2 - restartButtonBitmap.getHeight() / 2, new Paint());
        canvas.drawBitmap(donateButtonBitmap, Constants.SCREEN_WITH / 2 - donateButtonBitmap.getWidth() / 2,
                Constants.SCREEN_HEIGHT / 2 + restartButtonBitmap.getHeight() / 2 + 50 + donateButtonBitmap.getHeight() / 2, new Paint());


    }


}


@Override
public void update() {


    if (playerPoint.y > Constants.SCREEN_HEIGHT)

    {
        gameOver = true;

    }
    if (gameState == 2) {
        reset();
        gameState = 0;
        orientationData.newGame();
        gameOver = false;

    }


}


}

` These are my Logcats

03-12 14:42:22.033 16202-16202/com.example.kerstin.dojozusammenfassung E/InputEventReceiver: Exception dispatching input event. 03-12 14:42:22.033 16202-16202/com.example.kerstin.dojozusammenfassung E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 03-12 14:42:22.043 16202-16202/com.example.kerstin.dojozusammenfassung E/MessageQueue-JNI: java.lang.NullPointerException at com.example.kerstin.dojozusammenfassung.GamePlayScene.receiveTouch(GamePlayScene.java:202) at com.example.kerstin.dojozusammenfassung.SceneManager.receiveTouch(SceneManager.java:21) at com.example.kerstin.dojozusammenfassung.GamePanel.onTouchEvent(GamePanel.java:63) at android.view.View.dispatchTouchEvent(View.java:7198) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1888) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1888) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1888) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2052) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1506) at android.app.Activity.dispatchTouchEvent(Activity.java:2454) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2000) at android.view.View.dispatchPointerEvent(View.java:7392) at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3539) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3468) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4577) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4556) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4652) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:184) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:131) at android.os.Looper.loop(Looper.java:132) at android.app.ActivityThread.main(ActivityThread.java:5511) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) at dalvik.system.NativeStart.main(Native Method) 03-12 14:42:22.043 16202-16202/com.example.kerstin.dojozusammenfassung W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x40d0b390) 03-12 14:42:22.063 16202-16202/com.example.kerstin.dojozusammenfassung E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at com.example.kerstin.dojozusammenfassung.GamePlayScene.receiveTouch(GamePlayScene.java:202) at com.example.kerstin.dojozusammenfassung.SceneManager.receiveTouch(SceneManager.java:21) at com.example.kerstin.dojozusammenfassung.GamePanel.onTouchEvent(GamePanel.java:63) at android.view.View.dispatchTouchEvent(View.java:7198) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1888) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1888) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2187) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1888) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2052) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1506) at android.app.Activity.dispatchTouchEvent(Activity.java:2454) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2000) at android.view.View.dispatchPointerEvent(View.java:7392) at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3539) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3468) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4577) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4556) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4652) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:184) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:131) at android.os.Looper.loop(Looper.java:132) at android.app.ActivityThread.main(ActivityThread.java:5511) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) at dalvik.system.NativeStart.main(Native Method)

Manifest : `

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@drawable/unnamed"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".Info" />
    <activity android:name=".Einstellungen" />
    <activity android:name=".Spenden" />
    <activity android:name=".Spenden2" />
    <activity android:name=".MainGame" />
    <activity android:name=".LoginActivity" />
    <activity android:name=".RegisterActivity" />
    <activity android:name=".UserLogin" />
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".GamePlayScene"></activity>
</application>

`

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
  • you forgot to call `GamePlayScene()` after `super.onCreate(savedInstanceState);` – Pavneet_Singh Mar 12 '17 at 13:55
  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Cochi Mar 12 '17 at 14:05

2 Answers2

0

Well in android you generally do things in onCreate() Method not in a constructor. Try calling GameplayScene() (Assuming if its the first thing you want to do) in onCreate() or place its code in the onCreate() Method. Your TouchEvent() is probably returning null because nothing gets initialized as it's not in onCreate().

Omair Nabiel
  • 1,662
  • 2
  • 12
  • 24
  • I placed the code into onCreate Method, but then there is only a black screen and it stopps immediately – Kerstin Böck Mar 12 '17 at 16:02
  • You can try calling your functions in onCreate() in the order you want them to be executed. PS: Do change the name of function GamePlayScene() as it confuse it with the constructor. – Omair Nabiel Mar 12 '17 at 16:19
  • Thanks for your help! But the function GamePlayScene() is the constructor and if there is no constructor, the app stopps. Also when I put the code from the constructor into onCreate() and delete the constructor. – Kerstin Böck Mar 13 '17 at 15:24
0

I found out the error. GameplayScene wasn't the aktive scene and I didn't transfered the context to the GameplaScene, so the context was missing.