When I run the app on Android studio, my virtual Phone crashed without displaying any app information. I have confirmed that I have assigned every View component as follows (this is
MainActivity.java):
package com.codecademy.unquote2;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
int currentQuestionIndex;
int totalCorrect;
int totalQuestions;
ArrayList<Question> questions;
ImageView questionImageView;
TextView questionTextView;
TextView questionsRemainingTextView;
Button answer0Button;
Button answer1Button;
Button answer2Button;
Button answer3Button;
Button submitButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.drawable.ic_unquote2_icon);
getSupportActionBar().setDisplayUseLogoEnabled(true);
getSupportActionBar().setElevation(0);
setContentView(R.layout.activity_main);
questionImageView = findViewById(R.id.iv_main_question_image);
questionTextView = findViewById(R.id.tv_main_question_title);
questionsRemainingTextView = findViewById(R.id.tv_main_questions_remaining);
answer0Button = findViewById(R.id.btn_main_answer_0);
answer1Button = findViewById(R.id.btn_main_answer_1);
answer2Button = findViewById(R.id.btn_main_answer_2);
answer3Button = findViewById(R.id.btn_main_answer_3);
submitButton = findViewById(R.id.btn_main_submit_answer);
startNewGame();
}
public void displayQuestion(Question question){
questionImageView.setImageResource(question.imageId);
questionTextView.setText(question.questionText);
answer0Button.setText(question.answer0);
answer1Button.setText(question.answer1);
answer2Button.setText(question.answer2);
answer3Button.setText(question.answer3);
}
public void displayQuestionsRemaining(int questionRemaining){
int questionsRemaining = 6;
questionsRemainingTextView.setText(String.valueOf(questionsRemaining));
}
void onAnswerSubmission() {
Question currentQuestion = getCurrentQuestion();
if (currentQuestion.isCorrect()) {
totalCorrect = totalCorrect + 1;
}
questions.remove(currentQuestion);
displayQuestionsRemaining(questions.size());
if (questions.size() == 0) {
String gameOverMessage = getGameOverMessage(totalCorrect, totalQuestions);
System.out.println(gameOverMessage);
} else {
chooseNewQuestion();
displayQuestion(getCurrentQuestion());
}
}
void startNewGame() {
questions = new ArrayList<>();
Question question0 = new Question(R.drawable.img_quote_0, "Pretty good advice,\n" +
"and perhaps a scientist\n" +
"did say it… Who\n" +
"actually did?", "Albert Einstein", "Issac Newton", "Rita Mae Brown", "Rosalind Franklin", 2);
Question question1 = new Question(R.drawable.img_quote_1, "Was honest Abe\n" +
"honestly quoted? Who\n" +
"authored this pithy bit\n" +
"of wisdom?", "Edward Stieglitz", "Maya Angelou", "Abraham Lincoln", "Ralph Waldo Emerson", 0);
Question question2 = new Question(R.drawable.img_quote_2, "Easy advice to read,\n" +
"difficult advice to\n" +
"follow — who actually \n said it?", "Martin Luther King Jr.", "Mother Teresa", "Fred Rogers", "Oprah Winfrey", 1);
Question question3 = new Question(R.drawable.img_quote_3, "Insanely inspiring,\n" +
"insanely incorrect\n" +
"(maybe). Who is the\n" +
"true source of this\n" +
"inspiration?", "Nelson Mandela", "Harriet Tubman", "Mahatma Gandhi", "Nicholas Klein", 3);
Question question4 = new Question(R.drawable.img_quote_4, "A peace worth striving\n" +
"for — who actually\n" +
"reminded us of this?", "Malala Yousafzai", "Martin Luther King Jr.", "Liu Xiaobo", "Dalai Lama", 1);
Question question5 = new Question(R.drawable.img_quote_5, "Unfortunately, true —\n" +
"but did Marilyn Monroe\n" +
"convey it or did\n" +
"someone else?", "Laurel Thatcher Ulrich", "Eleanor Roosevelt", "Marilyn Monroe", "Queen Victoria", 0);
questions.add(question0);
questions.add(question1);
questions.add(question2);
questions.add(question3);
questions.add(question4);
questions.add(question5);
totalCorrect = 0;
totalQuestions = questions.size();
Question firstQuestion = chooseNewQuestion();
displayQuestionsRemaining(questions.size());
displayQuestion(firstQuestion);
}
Question chooseNewQuestion() {
int newQuestionIndex = generateRandomNumber(questions.size());
currentQuestionIndex = newQuestionIndex;
return questions.get(currentQuestionIndex);
}
int generateRandomNumber(int max) {
double randomNumber = Math.random();
double result = max * randomNumber;
return (int) result;
}
Question getCurrentQuestion() {
Question currentQuestion = questions.get(currentQuestionIndex);
return currentQuestion;
}
String getGameOverMessage(int totalCorrect, int totalQuestions) {
if (totalCorrect == totalQuestions) {
return "You got all " + totalQuestions + " right! You won!";
} else {
return "You got " + totalCorrect + " right out of " + totalQuestions + ". Better luck next time!";
}
}
}
What I have tried:
I went on to check the log and there are some implications on this error:
E/cademy.unquote: Invalid ID 0x00000000.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.codecademy.unquote2, PID: 26837
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.codecademy.unquote2/com.codecademy.unquote2.MainActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
at android.content.res.Resources.getText(Resources.java:348)
at android.widget.TextView.setText(TextView.java:5831)
at com.codecademy.unquote2.MainActivity.displayQuestion(MainActivity.java:64)
at com.codecademy.unquote2.MainActivity.startNewGame(MainActivity.java:149)
at com.codecademy.unquote2.MainActivity.onCreate(MainActivity.java:57)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I/Process: Sending signal. PID: 26837 SIG: 9
I am particularly alarmed with "invalid ID" stuff... I appreciate any workaround I can do for this application.