Android Studio ImageView Array NullPointerException - PullRequest
0 голосов
/ 03 ноября 2019

Я работаю над симулятором игры в кости (мой второй в истории проект по выяснению всего). У меня есть пять изображений кубиков и переменные для них в массиве, который я хочу просмотреть. Android Studio дает мне исключение NullPointerException в разных точках случая Switch, и я не могу понять, почему. Вот мои переменные и массив, включающий метод:

private ImageView imageViewDiceOne;
private ImageView imageViewDiceTwo;
private ImageView imageViewDiceThree;
private ImageView imageViewDiceFour;
private ImageView imageViewDiceFive;
private ImageView[] imageViewDice = new ImageView[]{imageViewDiceOne, imageViewDiceTwo,
        imageViewDiceThree, imageViewDiceFour, imageViewDiceFive};
private Button mButtonThrow;
private int diceValue;

private int rollDice() {
    this.diceValue = (int) (Math.random() * 6) + 1;

    return this.diceValue;
}

private void setImageViewDice(){
    for(int i = 0; i < imageViewDice.length; i++) {

        switch (rollDice()) {
            case 1:
                imageViewDice[i].setImageResource(R.drawable.dice1);
                break;
            case 2:
                imageViewDice[i].setImageResource(R.drawable.dice2);
                break;
            case 3:
                imageViewDice[i].setImageResource(R.drawable.dice3);
                break;
            case 4:
                imageViewDice[i].setImageResource(R.drawable.dice4);
                break;
            case 5:
                imageViewDice[i].setImageResource(R.drawable.dice5);
                break;
            case 6:
                imageViewDice[i].setImageResource(R.drawable.dice6);
                break;
        }
    }
}

И это мой OnClickListener:

    mButtonThrow = findViewById(R.id.button_throw);
    mButtonThrow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View viewFiveDice) {
                setImageViewDice();
        }
    });

И вот мое исключение (строка 45 была 5-го случая коммутатора, ноэто менялось при каждой попытке, и строка 68 - это мой OnClickListener):

    java.lang.NullPointerException: Attempt to invoke virtual method 'void 
    android.widget.ImageView.setImageResource(int)' on a null object reference
    at com.example.dice.FiveDice.setImageViewDice(FiveDice.java:45)
    at com.example.dice.FiveDice.access$000(FiveDice.java:10)
    at com.example.dice.FiveDice$1.onClick(FiveDice.java:68)

Спасибо за помощь новичку.

1 Ответ

0 голосов
/ 03 ноября 2019

Ну, вы не инициализируете свои ImageViews, так что это ваша первая проблема.

Вместо:

private ImageView imageViewDiceOne;
private ImageView imageViewDiceTwo;
private ImageView imageViewDiceThree;
private ImageView imageViewDiceFour;
private ImageView imageViewDiceFive;
private ImageView[] imageViewDice = new ImageView[]{imageViewDiceOne, imageViewDiceTwo, imageViewDiceThree, imageViewDiceFour, imageViewDiceFive};

Предполагая, что это в Activity, вам нужно будет что-то сделатькак:

private ImageView[] imageViewDice;

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

    imageViewDice = new ImageView[5]; // Initialize array

    // Set each reference in the array to something valid
    imageViewDice[0] = findViewById<ImageView>(R.id.imageView1);
    imageViewDice[1] = findViewById<ImageView>(R.id.imageView2);
    imageViewDice[2] = findViewById<ImageView>(R.id.imageView3);
    imageViewDice[3] = findViewById<ImageView>(R.id.imageView4);
    imageViewDice[4] = findViewById<ImageView>(R.id.imageView5);
}

Если это не имеет смысла, я бы предложил отдохнуть от Android и сосредоточиться на изучении Java / Kotlin и понимании того, как язык работает в первую очередь.

Надеюсьэто помогает!

...