繁体   English   中英

从ArrayList中选择随机ImageButton会引发NullPointerException

[英]Picking a random ImageButton from an ArrayList raises NullPointerException

我正在尝试更改从ArrayList中随机选择的ImageButton的图像,但引发NullPointerException。

我正在尝试通过ImageButton1.setImageResource(R.drawable.someImage);来更改ImageButton的图像ImageButton1.setImageResource(R.drawable.someImage); 单击ImageButton时。

然后,我希望程序更改从包含要使用的ImageButton的ArrayList中随机选择的其他ImageButton的ImageResource。 然后,我想通过以下方式将随机选择的ImageButton的imageResource设置为someOtherPicture:

ImageButton currentImage;
Random randomNumber = new Random();
int randomNum = randomNumber.nextInt(someArrayList.size());
currentImage = someArrayList.get(randomNum);
currentImage.setImageResource(R.drawable.someOtherImage);

我正在Android Studio中进行编辑,并在Motorola Moto G设备上运行,当我单击按钮时,应用程序突然停止。 Log Cat声称这是randomPlaceImage randomlyPlaceImage()方法上的NullPointerException。

这是整个代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import java.util.ArrayList;
import java.util.Random;

public class MainActivity extends Activity {

ImageButton ImageButton1;
ArrayList<ImageButton> someArrayList = new ArrayList<ImageButton>();
Random randomNumber = new Random();

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

addItemsToList();
ImageButton1 = (ImageButton) findViewById(R.id.imageButton1);
        ImageButton1.setOnClickListener(ImageButton1Listener);

}

  addItemsToList (){
    someArrayList.add(ImageButton1);
    someArrayList.add(ImageButton2);
    someArrayList.add(ImageButton3);
    someArrayList.add(ImageButton4);
    someArrayList.add(ImageButton5);
    someArrayList.add(ImageButton6);
    someArrayList.add(ImageButton7);
    someArrayList.add(ImageButton8);
    someArrayList.add(ImageButton9);
}

public void changeImageResource() {
 ImageButton currentImage;
    int randomNum = randomNumber.nextInt(someArrayList.size());
    currentImage = someArrayList.get(randomNum);
    currentImage.setImageResource(R.drawable.someOtherImage);
}

    View.OnClickListener ImageButton1Listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        ImageButton1.setImageResource(R.drawable.someImage);
        someArrayList.remove(ImageButton1);

        changeImageResource();
    }
};    

}

注意:当然,对所有ImageButton都重复了OnCLick方法

您似乎在初始化之前将项目添加到列表中:

addItemsToList();
ImageButton1 = (ImageButton) findViewById(R.id.imageButton1);
        ImageButton1.setOnClickListener(ImageButton1Listener);

这意味着someArrayList将保存一堆空引用。

这就是为什么currentImage = someArrayList.get(randomNum); 返回null和currentImage.setImageResource(R.drawable.someOtherImage); 导致NullPointerException。

您应该将初始化顺序更改为:

ImageButton1 = (ImageButton) findViewById(R.id.imageButton1);
        ImageButton1.setOnClickListener(ImageButton1Listener);
ImageButton2 = (ImageButton) findViewById(R.id.imageButton2);
        ImageButton2.setOnClickListener(ImageButton2Listener);
....
addItemsToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM