Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio ImageView数组NullPointerException_Android_Arrays_Android Studio_Nullpointerexception_Imageview - Fatal编程技术网

Android Studio ImageView数组NullPointerException

Android Studio ImageView数组NullPointerException,android,arrays,android-studio,nullpointerexception,imageview,Android,Arrays,Android Studio,Nullpointerexception,Imageview,我正在做一个骰子模拟器(我有史以来第二个解决一切问题的项目)。我有五个骰子图像和一个数组中的变量,我想循环通过它们。Android Studio在交换机外壳的不同位置给了我一个NullPointerException,我不知道为什么。 以下是我的变量和数组,包括方法: private ImageView imageViewDiceOne; private ImageView imageViewDiceTwo; private ImageView imageViewDiceThree; priva

我正在做一个骰子模拟器(我有史以来第二个解决一切问题的项目)。我有五个骰子图像和一个数组中的变量,我想循环通过它们。Android Studio在交换机外壳的不同位置给了我一个NullPointerException,我不知道为什么。 以下是我的变量和数组,包括方法:

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;
        }
    }
}
这里是我的例外(第45行是切换的案例5,但每次尝试都会改变,第68行是我的onclick侦听器):


感谢您帮助新来者。

好吧,您没有初始化ImageView,所以这是您的第一个问题

而不是:

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 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);
}
private ImageView[]imageViewDice;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageViewDice=新建ImageView[5];//初始化数组
//将数组中的每个引用设置为有效值
imageViewDice[0]=findViewById(R.id.imageView1);
imageViewDice[1]=findViewById(R.id.imageView2);
imageViewDice[2]=findViewById(R.id.imageView3);
imageViewDice[3]=findViewById(R.id.imageView4);
imageViewDice[4]=findViewById(R.id.imageView5);
}
如果这样做没有意义,我建议你先离开Android,专注于学习Java/Kotlin,了解该语言的工作原理


希望有帮助

很抱歉没有发布我的OnCreate。我已经在那里初始化了ImageView(不是使用数组索引,而是使用我在第一篇文章中提到的变量)。我尝试了你的代码,但仍然收到相同的错误。据我所知,代码中的所有不同之处在于,图像视图是逐个指定的,而不是直接写入数组中。对的是否还有其他原因可能导致此错误?谢谢你的帮助!请发布导致问题的完整代码。我猜不出你的问题是什么。谢谢你花时间和精力解决这个问题!我非常感谢,并将尝试更好地表达未来的问题,并发布更多可能相关的代码。我认为我确实发布了导致问题的完整代码-OnCreate工作正常。现在我已经更改了它,因此方法setImageViewDice()不再包含循环/开关。因为这是唯一改变的事情,所以通过数组或开关的循环一定是导致这种情况发生的原因,但我仍然不知道为什么或如何发生。
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 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);
}