Anfängerproblem: ImageView Initialisierung wirft NullPointerException auf

  • Antworten:3
  • Bentwortet
Ford Prefect
  • Forum-Beiträge: 29

10.05.2017, 20:09:27 via Website

Haudiho,
ich bin ziemlich frisch in der Androidprogramierung und habe folgendes Problem:
In meinem Programm wirft die Initialisierung eines ImageViews eine NullPointerException auf.
Ich hab leider sowohl keine Ahnung was das heißt, noch was ich da falsch gemacht habe.
Hier ist mein Code:

import android.media.MediaPlayer;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;

public class GameActivity extends AppCompatActivity implements View.OnClickListener {

int counter = 0;
int round = 1;
int coincidence = 0;
boolean finished = true;
final ImageView gameImages = (ImageView)findViewById(R.id.gameImageView);
final MediaPlayer mediaPlayer1 = MediaPlayer.create(GameActivity.this, R.raw.sound1);
final MediaPlayer mediaPlayer2 = MediaPlayer.create(GameActivity.this, R.raw.sound2);
final MediaPlayer mediaPlayer3 = MediaPlayer.create(GameActivity.this, R.raw.sound3);
final MediaPlayer mediaPlayer4 = MediaPlayer.create(GameActivity.this, R.raw.sound4);
final MediaPlayer mediaPlayer5 = MediaPlayer.create(GameActivity.this, R.raw.sound5);
final MediaPlayer mediaPlayer6 = MediaPlayer.create(GameActivity.this, R.raw.sound6);

@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.game_activity);
    gameImages.setOnClickListener(GameActivity.this);
}

public void onClick(View v) {
    counter++;
    coincidence = (int) (Math.random() * 6 + 1);
    if (finished) {
        switch (coincidence) {
            case 1:
                mediaPlayer1.start();
            case 2:
                mediaPlayer2.start();
            case 3:
                mediaPlayer3.start();
            case 4:
                mediaPlayer4.start();
            case 5:
                mediaPlayer5.start();
            case 6:
                mediaPlayer6.start();
        }
    }
    showImages();


}

 public void showImages(){
    if (counter >= round*4){
        gameImages.setImageResource(R.drawable.picture3);
        finished = false;

    }
    else{
        if (counter >= round*3){
            gameImages.setImageResource(R.drawable.picture2);

        }
        else{
            if (counter >= round*2){
                gameImages.setImageResource(R.drawable.picture1);
            }
            else{
                if (counter >= round*1){
                    gameImages.setImageResource(R.drawable.picture0);
                }
        }
    }
}

}

Ich habe den Code ein bisschen abgekürzt, bei mir zeigt er nach und nach 43 Bilder an.

Hier ist die Fehlermeldung, die die Ausführung der App aufwürft:

> 05-10 18:54:04.141 3589-3589/slartbart.example E/AndroidRuntime: FATAL EXCEPTION: main
                                                                Process: slartbart.example, PID: 3589
                                                                java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{slartbart.punchanazi/slartbart.example.GameActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2567)
                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                    at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                    at android.os.Looper.loop(Looper.java:154)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
                                                                    at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:120)
                                                                    at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:151)
                                                                    at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:31)
                                                                    at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:55)
                                                                    at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:33)
                                                                    at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:33)
                                                                    at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201)
                                                                    at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
                                                                    at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:525)
                                                                    at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:193)
                                                                    at slartbart.example.GameActivity.<init>(GameActivity.java:18)
                                                                    at java.lang.Class.newInstance(Native Method)
                                                                    at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2557)
                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                                                                    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                                                                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                    at android.os.Looper.loop(Looper.java:154) 
                                                                    at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

Könnt ihr mir bitte sagen, was der Fehler genau bedeutet und wie ich ihn vermeiden bzw. beheben kann?
Mit freundlichen Grüßen,
Ford.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.05.2017, 20:27:12 via Website

Hallo Ford,
du definierst und initialisierst deine Klassenvarablen direkt. Das sollte so nicht sein.
Definieren kannst du diese in der Klasse, aber das initialisieren sollte in der OnCreate stattfinden.

D.h. du entferst due Varablenzuweisung nach dem '=' und schiebst diese ins OnCreate:
So:

gameImages = (ImageView)findViewById(R.id.gameImageView); //solle es dann da stehen

LG Pascal //It's not a bug, it's a feature. :) ;)

Ford Prefect

Antworten
Ford Prefect
  • Forum-Beiträge: 29

10.05.2017, 20:34:12 via Website

Vielen Dank, Problem gelöst :)

Pascal P.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.05.2017, 20:44:13 via Website

Sehr schon :)
WEnn dein Problem erledigt ist, dann setze deinen Thread bitte noch auf "Beantwortet" inde mdu über deinem ersten Post auf "Mehr"->"Beantwortet setzen" klickst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten