java - ArrayIndexOutOfBoundsException。安卓
问题描述
我在某些设备上的谷歌开发者控制台上遇到 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
用于将按钮的索引保存在数组中,然后我将该按钮数组放入布局中
解决方案
您必须使用大小初始化数组
int max_word_size = 20; //for example
public static Button[] button_array = new Button[max_word_size ];
推荐阅读
- django - Django:通过表单向另一台服务器发送发布请求
- java - 如何在我的 lambda 函数中传递多个 get 参数?
- python - 是否有可以对有限状态机进行时间逻辑模型检查的 Python 包?
- android - 监听应用程序通知设置的变化
- json - 期望一个大小为 2 但集合大小为 0 的集合?
- android - body_loc_args 中的 FCM 格式日期
- node.js - 如何卸载间接依赖
- python - 如何将程序的 STDOUT 重定向到 GDB 调试程序的 STDIN?
- c# - this[] 索引器:类型“SheetsDecoratorImpl”已经保留了一个名为“get_Item”的成员,具有相同的参数类型
- r - 如何创建一个新变量,然后用多个条件更改它?