【问题标题】:Picking a random ImageButton from an ArrayList raises NullPointerException从 ArrayList 中选择一个随机 ImageButton 会引发 NullPointerException
【发布时间】:2014-08-04 19:23:49
【问题描述】:

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

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

然后我希望程序更改从包含我要使用的 ImageButtons 的 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 中编辑并在摩托罗拉 Moto G 设备上运行,当我单击按钮时,应用程序突然停止。 Log Cat 声称它是 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();
    }
};    

}

注意:OnCLick 方法当然会针对所有 ImageButtons 进行迭代

【问题讨论】:

    标签: java android arraylist nullpointerexception imagebutton


    【解决方案1】:

    看起来您是在初始化项目之前将它们添加到列表中:

    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();
    

    【讨论】:

      猜你喜欢
      • 2017-07-14
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 2014-06-19
      • 2012-02-21
      • 2016-03-03
      相关资源
      最近更新 更多