簡體   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