【问题标题】:ArrayIndexOutOfBoundsException. Android [duplicate]ArrayIndexOutOfBoundsException。安卓[重复]
【发布时间】:2020-11-02 06:08:30
【问题描述】:

我在某些设备上的谷歌开发者控制台上遇到 ArrayIndexOutOfBoundsException 崩溃。这对我来说很奇怪,因为它不会发生在我的设备和我测试过的其他一些设备上,而且我还在模拟器上不同版本的 API 上测试了我的 apk,并且不会发生崩溃。我完全盲目应该怎么做才能避免这种崩溃,因为我看不到它。在button_array[btn_ref] = new Button(mContext); 上崩溃 下面附上我的按钮数组代码:

public static Button[] button_array = null;
int btn_ref = 0;

int count = 0;
        for (int i = 0; i < words.size(); i++) {

            if (i >= 5) {

                for (int z = i; z < words.size(); z++) {
                    bonus_words.add(words.get(z));
                }
                if (!checkResult.equals("true")) {
                    tinydb.putListString("BonusList", bonus_words);
                }
                break;
            } else {
                char[] eachLetterinArray = words.get(i).toCharArray();
                for (int j = 0; j < eachLetterinArray.length; j++) {
                    if (Character.isLetter(eachLetterinArray[j])) {
                        count++;
                    }
                }
            }

        }

button_array = new Button[count];

 for (int i = 0; i < words.size(); i++) {
            int z = words.get(i).length();

            LinearLayout ln = new LinearLayout(mContext);
            ln.setOrientation(LinearLayout.HORIZONTAL);
            ln.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));

            row = i;
            int row_items_count_start = 0;
            int row_items_count_end = 0;

            boolean first_time_check_row = true;

for (i = 0; i < z; i++) {

                row_items_count_end = btn_ref;
                if (first_time_check_row) {
                    row_items_count_start = btn_ref;
                    first_time_check_row = false;
                }

                button_array[btn_ref] = new Button(mContext); //**Getting crash here**

                LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(width_height_cal, width_height_cal, 0.1f);
                p.setMargins(5, 5, 5, 5);
                button_array[btn_ref].setLayoutParams(p);
                button_array[btn_ref].setTextColor(Color.WHITE);
                button_array[btn_ref].setBackgroundResource(R.drawable.un_filled_box2);
                ln.addView(button_array[btn_ref]);

                btn_ref++;
            }

            indexes.add("row " + row + "," + row_items_count_start + "," + row_items_count_end + "," + words.get(i));
            vert_lay.setOrientation(LinearLayout.VERTICAL);
            vert_lay.addView(ln);

            if (indexes.size() >= 5) {
                break;
            }

btn_ref 用于将按钮的索引保存在数组中,然后我将该按钮数组放入布局中

【问题讨论】:

  • 您是否要创建z about of 按钮?
  • 我已经更新了我的问题。实际上我有一个words 的数组列表,我在顶部循环中一个接一个地获取单词,z 一个接一个地包含每个单词的长度,然后为单词创建按钮数组

标签: java android arrays


【解决方案1】:

你必须用大小初始化一个数组

int max_word_size = 20; //for example
public static Button[] button_array = new Button[max_word_size ];

【讨论】:

  • 我已经更新了我的代码。实际上我得到了单词数组的前 5 个条目,然后得到每个单词的大小和每个字母的增量计数。 button_array 有一个动态大小传递给它,即 count
  • 数组的大小是固定的。对于动态大小,使用 arraylist 或使用最大假定大小的数组
  • 使用这个简单的数组有什么区别Button[] button_array = new Button[max_word_size];和 ArrayList
  • 数组的大小是固定的。创建后我们无法更改它。但是 arraylist 我们可以删除项目,添加新项目,更改新任务的大小。 Arraylist 更灵活
  • 我没有改变数组的大小。我在运行时给它一个固定的大小,然后填充该数组。此过程会导致开发者控制台上显示的某些设备崩溃
猜你喜欢
  • 2012-01-28
  • 2015-11-08
  • 2014-11-17
  • 2013-02-07
  • 1970-01-01
  • 2015-09-21
  • 2016-08-31
  • 2011-02-25
  • 2019-12-22
相关资源
最近更新 更多