Quantcast
Channel: Active questions tagged crash - Stack Overflow
Viewing all articles
Browse latest Browse all 7188

Why is my Application going to a black screen when I click on a level?

$
0
0

I am creating a mathematical Quiz, that has 10 questions, all randomly generated, completely. For some reason, when I click on the level I wish to play, it crashes.

No errors are shown in logcat annoyingly.

This is the class that should be executed when a level is chosen:

package com.georgeashby11221.arithmeticquiz;

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.util.HashMap;
import java.util.Random;

public class GameActivity extends Activity {
TextView txtTimer, txtQuestion;
EditText fldAnswer;
Button submitAnswer;

Boolean questionAnswered = false;
String currentQuestion;
Integer currentAnswer = -1;
Boolean timerActive = false;
HashMap<String, Integer> levelTimes = new HashMap<>();
CountDownTimer countDownTimer;
Integer timeLeftInMilliseconds;
String levelSelected;
Integer userAnswer;
Integer userScore;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);

    txtTimer = findViewById(R.id.txtTimer);
    txtQuestion = findViewById(R.id.txtQuestion);
    fldAnswer = findViewById(R.id.fldAnswer);
    submitAnswer = findViewById(R.id.btnSubmit);

    submitAnswer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!(fldAnswer.getText().toString().contains("."))) {
                userAnswer = Integer.parseInt(fldAnswer.getText().toString());
                questionAnswered = true;
            }
        }
    });

    levelTimes.put("1", 20);
    levelTimes.put("2", 10);

    Bundle extras = getIntent().getExtras();

    if (extras != null) {
        levelSelected = extras.getString("levelSelected");
    }

    updateQuestion();
}

public void startStop() {
    if (timerActive) {
        stopTimer();
    } else {
        startTimer();
    }
}

public void startTimer() {
    if(levelSelected != null && levelSelected != "0"&& levelTimes.get(levelSelected) != null) {
        timeLeftInMilliseconds = levelTimes.get(levelSelected) * 1000;
        timerActive = true;
        countDownTimer = new CountDownTimer(timeLeftInMilliseconds, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                timeLeftInMilliseconds = Integer.parseInt(String.valueOf(millisUntilFinished));
                txtTimer.setText(String.valueOf(timeLeftInMilliseconds / 1000));
            }

            @Override
            public void onFinish() {
                timerActive = false;
            }
        }.start();
    }
}

public void stopTimer() {
    countDownTimer.cancel();
    timerActive = false;
}

public int getRandomIntegerBetweenRange(Integer min, Integer max){
    Integer random = new Random().nextInt((max - min) + 1) + min;
    return random;
}

public void randomQuestion() {
    Integer randomOperator = 1;
    Integer first = 0;
    Integer second = 0;
    switch (randomOperator) {
        case 1:
            first = getRandomIntegerBetweenRange(1, 12);
            second = getRandomIntegerBetweenRange(1, 12);

            currentQuestion = (first + " + " + second + " = ?");
            currentAnswer = (first + second);
            break;
        case 2:
            currentAnswer = -1;
            while (currentAnswer < 0) {
                first = getRandomIntegerBetweenRange(1, 12);
                second = getRandomIntegerBetweenRange(1, 12);

                if((first - second) > 0) {
                    currentQuestion = (first + " - " + second + " = ?");
                    currentAnswer = first + second;
                    break;
                }
            }
        case 3:
            first = getRandomIntegerBetweenRange(1, 12);
            second = getRandomIntegerBetweenRange(1, 12);

            currentQuestion = (first + " * " + second + " = ?");
            currentAnswer = first + second;
            break;
        case 4:
            Boolean isDivisible = false;
            while (isDivisible == false) {
                first = getRandomIntegerBetweenRange(1, 12);
                second = getRandomIntegerBetweenRange(1, 12);

                if((first % second) == 0) {
                    currentQuestion = (first + " / " + second + " = ?");
                    currentAnswer = first + second;
                    isDivisible = true;
                    break;
                }
            }
    }

}

public void updateQuestion() {
    for(int i = 1; i <=10; i++) {
        randomQuestion();
        txtQuestion.setText(currentQuestion);
        if (levelSelected != "0") {
            startStop();
        }
        while (checkAnswer() == "wait") {
            checkAnswer();
        }
    }
}

public String checkAnswer() {
    if(questionAnswered == true) {
        if(userAnswer == currentAnswer) {
            return "correct";
        } else {
            return "incorrect";
        }
    } else {
        return "wait";
    }
}
}

And this is my Level Selection java class:

package com.georgeashby11221.arithmeticquiz;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

public class LevelSelectionActivity extends Activity implements View.OnClickListener {

Button levelZero, levelOne, levelTwo, mainMenu;
ImageButton levelZeroInfo, levelOneInfo, levelTwoInfo;
String levelSelected;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_levelselection);

    // Registering and Assigning Buttons

    levelZero = findViewById(R.id.btnLevelZero);
    levelOne = findViewById(R.id.btnLevelOne);
    levelTwo = findViewById(R.id.btnLevelTwo);
    mainMenu = findViewById(R.id.btnMainScreen);

    levelZeroInfo = findViewById(R.id.imgBtnLevelZeroInfo);
    levelOneInfo = findViewById(R.id.imgBtnLevelOneInfo);
    levelTwoInfo = findViewById(R.id.imgBtnLevelTwoInfo);

    levelZero.setOnClickListener(this);
    levelOne.setOnClickListener(this);
    levelTwo.setOnClickListener(this);
    mainMenu.setOnClickListener(this);
    levelZeroInfo.setOnClickListener(this);
    levelOneInfo.setOnClickListener(this);
    levelTwoInfo.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    Intent screen = new Intent(LevelSelectionActivity.this, GameActivity.class);
    switch (v.getId()) {
        case R.id.btnLevelZero:
            levelSelected = "0";
            screen.putExtra("levelSelected", levelSelected);
            startActivity(screen);
            break;
        case R.id.btnLevelOne:
            levelSelected = "1";
            screen.putExtra("levelSelected", levelSelected);
            startActivity(screen);
            break;
        case R.id.btnLevelTwo:
            levelSelected = "2";
            screen.putExtra("levelSelected", levelSelected);
            startActivity(screen);
            break;
        case R.id.btnMainScreen:
            Intent mainMenu = new Intent(LevelSelectionActivity.this, MainActivity.class);
            startActivity(mainMenu);
            break;
        case R.id.imgBtnLevelZeroInfo:
            Toast.makeText(getApplicationContext(), "Level 0 has no time limit, reccomended for beginners!", Toast.LENGTH_SHORT).show();
            break;
        case R.id.imgBtnLevelOneInfo:
            Toast.makeText(getApplicationContext(), "Level 1 has a time limit of 20 seconds, reccomended for novices!", Toast.LENGTH_SHORT).show();
            break;
        case R.id.imgBtnLevelTwoInfo:
            Toast.makeText(getApplicationContext(), "Level 2 has a time limit of 10 seconds, reccomended for experts!", Toast.LENGTH_SHORT).show();
            break;
    }
}
}

Viewing all articles
Browse latest Browse all 7188


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>