I'm working on a little quiz game about Iceland. But when I start my second Activity the app crashes with a NullPointerException. Can anybody find out where it is? The code looks at least not wrong to me....
This is the crashing code:
package com.example.root.myapplication;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Quiz extends AppCompatActivity {
Quest[] fragen;
int i=0;
Button btna;
Button btnb;
Button btnc;
Button btnd;
TextView solsign;
TextView frage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
fragen = new Quest[10];
mkquest();
}
public void mkquest(){
//fragen = new Quest[10];
btna = (Button) findViewById(R.id.button2);
btnb = (Button) findViewById(R.id.button3);
btnc = (Button) findViewById(R.id.button4);
btnd = (Button) findViewById(R.id.button5);
solsign = (TextView) findViewById(R.id.textView2);
frage = (TextView) findViewById(R.id.textView);
readArray();
if(fragen[0].ansA!=null) {
btna.setText(fragen[0].ansA);
btnb.setText(fragen[0].ansB);
btnc.setText(fragen[0].ansC);
btnd.setText(fragen[0].ansD);
frage.setText(fragen[0].question);
}
else {
Context context = getApplicationContext();
CharSequence text = "Exception!!!";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
public void nextquest(View view){
i++;
btna.setText(fragen[i].ansA);
btnb.setText(fragen[i].ansB);
btnc.setText(fragen[i].ansC);
btnd.setText(fragen[i].ansD);
frage.setText(fragen[i].question);
solsign.setText("");
}
public void checkans(View view){
switch (view.getId()){
case R.id.button2:
if(btna.getText().toString()==fragen[i].rightans){
solsign.setText("Richtige Antwort!");
}
else solsign.setText("Falsche Antwort!");
break;
case R.id.button3:
if(btna.getText().toString()==fragen[i].rightans){
solsign.setText("Richtige Antwort!");
}
else solsign.setText("Falsche Antwort!");
break;
case R.id.button4:
if(btna.getText().toString()==fragen[i].rightans){
solsign.setText("Richtige Antwort!");
}
else solsign.setText("Falsche Antwort!");
break;
case R.id.button5:
if(btna.getText().toString()==fragen[i].rightans){
solsign.setText("Richtige Antwort!");
}
else solsign.setText("Falsche Antwort!");
break;
}
}
public class Quest{
String question="a";
String ansA="A";
String ansB="A";
String ansC="A";
String ansD="A";
String rightans="A";
}
public void readArray(){
if(fragen[0].ansA!=null) {
fragen[0].ansA = "Rejkjavik";
fragen[0].ansB = "Reykjavik";
fragen[0].ansC = "Reikjavik";
fragen[0].ansD = "Reykiavik";
fragen[0].question = "Wie heißt die Hauptstadt Islands?";
fragen[0].rightans = "Reykjavik";
fragen[1].ansA = "10.003 Mio. US$";
fragen[1].ansB = "25.003 Mio. US$";
fragen[1].ansC = "20.003 Mio. US$";
fragen[1].ansD = "18.003 Mio. US$";
fragen[1].question = "Wie hoch ist das BIP Islands (2007)?";
fragen[1].rightans = "20.003 Mio. US$";
/* fragen[0].ansA="";
fragen[0].ansB="";
fragen[0].ansC="";
fragen[0].ansD="";
fragen[0].question="";
fragen[0].rightans="";
fragen[0].ansA="";
fragen[0].ansB="";
fragen[0].ansC="";
fragen[0].ansD="";
fragen[0].question="";
fragen[0].rightans="";
fragen[0].ansA="";
fragen[0].ansB="";
fragen[0].ansC="";
fragen[0].ansD="";
fragen[0].question="";
fragen[0].rightans="";
fragen[0].ansA="";
fragen[0].ansB="";
fragen[0].ansC="";
fragen[0].ansD="";
fragen[0].question="";
fragen[0].rightans="";
fragen[0].ansA="";
fragen[0].ansB="";
fragen[0].ansC="";
fragen[0].ansD="";
fragen[0].question="";
fragen[0].rightans="";
fragen[0].ansA="";
fragen[0].ansB="";
fragen[0].ansC="";
fragen[0].ansD="";
fragen[0].question="";
fragen[0].rightans="";
fragen[0].ansA="";
fragen[0].ansB="";
fragen[0].ansC="";
fragen[0].ansD="";
fragen[0].question="";
fragen[0].rightans="";
fragen[0].ansA="";
fragen[0].ansB="";
fragen[0].ansC="";
fragen[0].ansD="";
fragen[0].question="";
fragen[0].rightans="";
*/
}
else{
Context context = getApplicationContext();
CharSequence text = "Exception!!!";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
}
and here comes the exception:
06-28 09:26:38.434 11677-11677/com.example.root.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.root.myapplication, PID: 11677 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.root.myapplication/com.example.root.myapplication.Quiz}: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.root.myapplication.Quiz$Quest.ansA' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5422) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.root.myapplication.Quiz$Quest.ansA' on a null object reference at com.example.root.myapplication.Quiz.readArray(Quiz.java:134) at com.example.root.myapplication.Quiz.mkquest(Quiz.java:45) at com.example.root.myapplication.Quiz.onCreate(Quiz.java:29) at android.app.Activity.performCreate(Activity.java:6251) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5422) at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)`
To me it seems as if everything was initialized correctly...
Thank you very much in advance!
Edit: initializing fragen like this unfortunately doesn't work either:
for (int j=0; j<9; j++) {
fragen[j] = new Quest();
}
There is a reference for the classes I want to execute onClick inside my .xml file.
Please don't mark my question as duplicate as I am not able to find my mistake. I know what a NullPointerException is but to me the code is correct....