java.lang.ArrayIndexOutOfBoundsException:length = 0; index = 0 – 数据库阅读 – Android
我创建了一个从数据库中读取数据并将其放入String
数组的方法。 Android Studio不会出现语法错误,但是当我启动应用程序时,日志会显示:
03-19 16:31:20.938 2518-2518/com.mms.dailypill E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.mms.dailypill, PID: 2518 java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 at com.mms.dailypill.DBManager.getMedicines(DBManager.java:56)
方法代码是:
public String[] getMedicines() { SQLiteDatabase db = dbManager.getWritableDatabase(); String[] columns = {dbManager.getName(), dbManager.getFormat(), dbManager.getAmount(), dbManager.getExp_date(), dbManager.getTime()}; Cursor cursor = db.query(dbManager.getTableName(), columns, null, null, null, null, null); String[] medicines = {}; String name, format, exp_date, time; int amount; int count = 0; while(cursor.moveToNext()) { name = cursor.getString(0); format = cursor.getString(1); amount = cursor.getInt(2); exp_date = cursor.getString(3); time = cursor.getString(4); medicines[count] = "Name: " + name + " Format: " + format + " Amount: " + amount + " Expiration Date: " + exp_date + " Time: " + time; count++; } db.close(); return medicines; }
正如日志所说,例外情况在第56行给出:
time = cursor.getString(4);
我读的表有6列: id
, name
, format
, amount
, exp_date
, time
。 我只想显示没有id
列的整个表,所以当我调用getString()
方法时,我从索引1
而不是从0
。
我真的无法理解问题所在,所以如果有人能帮助我,我会很感激。 提前致谢!
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
即使你解决了你的问题,但是我想解释一下为什么会出现这个错误,当你初始化没有大小的空数组时会发生这个错误,或者在这种情况下错误初始化String[] medicines = {};
它的空白大小为0,然后他尝试在第一个索引0处添加不存在的值,因此解决方案初始化为他的列表大小String[] medicines = new String[cursor.getCount()];
注意
数组是一个容器对象,它包含固定数量的单个类型的值。 创建数组时,将建立数组的长度。 创建后,其长度是固定的。 您已经在“Hello World”的主要方法中看到了一个数组示例! 应用。 本节更详细地讨论了数组。
概要
一个数组创建它需要固定大小,而不是像您可以添加的数组列表。
资源
对于我的情况,我不得不请求数组的长度
if (bill_inputs.length>0){ textViewInputType.setText(bill_inputs[0].getInput_name()); }
因此,在做任何事情之前检查长度