0

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....

Domi
  • 181
  • 1
  • 1
  • 4
  • 1
    You array fragen does not seem to be initialized? – Razgriz Jun 28 '16 at 07:42
  • YOu have to remember to set onClickListener on the buttons if you want to answer at all. Working on an answer – Zoe Jun 28 '16 at 07:43
  • you have to fill the `fragen` array with `new Quest()` on each position. – wake-0 Jun 28 '16 at 07:45
  • This should help you: http://pastebin.com/EnrDTLwt Repeat what I did when I initialized fragen[0] with all 10 or as many as you would need. WHen the max size is set to 10, the index goes from 0-9 without any exceptions. Hope you see this – Zoe Jun 28 '16 at 07:58
  • @Polarbear0106 Thank you very much! Your solution works great! Have never experienced a forum where you get so good answers in such a short time – Domi Jun 28 '16 at 08:22

0 Answers0