java - 如果我的数组达到一定长度,Android 应用程序将无法运行

标签 java android arrays

我正在创建的应用程序有很多用户可以滚动的图片,在应用程序中有一个对象数组,每个对象都包含一张图片和一个统计数据。我的应用程序运行完美,我的数组仅包含 58 个对象,但是现在当我构建应用程序时退出并出现错误“抱歉,您的应用程序已意外停止”并且 LogCat 显示

10-25 18:46:24.578: ERROR/AndroidRuntime(491): FATAL EXCEPTION: main
10-25 18:46:24.578: ERROR/AndroidRuntime(491): java.lang.RuntimeException: Unable to
instantiate activity ComponentInfo{com.example.notes/com.example.notes.NotesListActivity}:
java.lang.ArrayIndexOutOfBoundsException

这是我当前的代码

public class NotesListActivity extends Activity implements OnClickListener
{

public boolean nextClicked = false;
public boolean prevClicked = false;
public int counter = 1;
public int nextImg;
public FunnyPic[] picArray = new FunnyPic[55];
{
    picArray[0] = new FunnyPic(R.raw.img1, 0);
    picArray[1] = new FunnyPic(R.raw.img2, 0);
    .....
    .....
    .....
    picArray[180] = new FunnyPic(R.raw.img181, 0);
    picArray[181] = new FunnyPic(R.raw.img182, 0);

}

public void onCreate(Bundle savedInstanceState) 
{

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button changePicButton = (Button) this.findViewById(R.id.button1);
    changePicButton.setOnClickListener(this);


}

public void onClick(View view)
{
    Log.i("onClick", "BEGIN");
    ImageView image = (ImageView) findViewById(R.id.imageView1);
    if(counter == picArray.length-1)
        counter=0;
    image.setImageResource(picArray[counter].getImg());
    counter++;
    Log.i("onClick", "END");
}

public void prevPicHandler(View traget)
{
    if(counter==0)
    {
        counter = picArray.length-1;
    }
    counter--;
    Log.i("onClick", "BEGIN");
    ImageView image = (ImageView) findViewById(R.id.imageView1);
    image.setImageResource(picArray[counter].getImg());

    Log.i("onClick", "END");
}




}

如果您有任何建议,请告诉我。另外,如果有人可以推荐一种更有效的方法将对象放入数组中,这样我就不必在每次添加新图片时手动将它们放入数组中。

谢谢

最佳答案

您正在创建一个包含 55 个元素的数组:

public FunnyPic[] picArray = new FunnyPic[55];

此处最大有效索引为 54。

然后您尝试访问元素 181:

picArray[181] = new FunnyPic(R.raw.img182, 0);

您预计效果如何?您是否考虑过使用 List<FunnyPic>反而?

请注意,您有一个数组变量声明语句,然后是一个单独的初始化 block 。您没有数组初始值设定项。如果这就是您所认为的,那么您应该使用:

public FunnyPic[] picArray =
{
    new FunnyPic(R.raw.img1, 0),
    new FunnyPic(R.raw.img2, 0),
    ...
    new FunnyPic(R.raw.img182, 0)
};

关于java - 如果我的数组达到一定长度,Android 应用程序将无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7894449/

相关文章:

c - 中断驱动的 UART 中的流处理 - ATMEGA328P

c - ISO C 禁止在 C 中使用空的初始化大括号

java - 如何显示所有字段?

java - 收到错误 "java.lang.IllegalStateException: Can print only from an activity"?

java - Spring MVC 前端选择表单操作目标

android - 如何从 android studio 安装两个不同版本的应用程序?

android - 为什么方法 getOAuthAccessToken 总是在 twitter4j api 中触发异常?

java - 正则表达式不起作用

android - 在 MvxFragment 中关闭/隐藏 Android 软键盘

java - 将字符转换为大写而不改变原始数组