Android Studio ImageView数组NullPointerException
我正在做一个骰子模拟器(我有史以来第二个解决一切问题的项目)。我有五个骰子图像和一个数组中的变量,我想循环通过它们。Android Studio在交换机外壳的不同位置给了我一个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
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);
}