java.lang.ArrayIndexOutOfBoundsException:length = 0; index = 0 - 数据库阅读 - Android

时间:2015-03-19 15:57:30

标签: java android arrays exception indexoutofboundsexception

我创建了一个从数据库中读取数据并将其放入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列:idnameformatamountexp_datetime。我只想显示没有id列的整个表格,因此当我调用getString()方法时,我从索引1开始,而不是从0开始。

我真的无法理解问题出在哪里,所以如果有人可以帮助我,我会很感激。 提前谢谢!

3 个答案:

答案 0 :(得分:11)

java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 

即使您解决了问题,但我想解释为什么会发生此错误,当您初始化没有大小的空数组时会发生此错误,或者在这种情况下错误初始化String[] medicines = {};其空的大小为0,然后他尝试在第一个不存在的索引0处添加值,因此解决方案使用其列表大小String[] medicines = new String[cursor.getCount()];

进行初始化

<强>通知

数组是一个容器对象,它包含固定数量的单个类型的值。创建数组时,将建立数组的长度。创建后,其长度是固定的。您已经在“Hello World!”的主要方法中看到了一个数组示例。应用。本节将更详细地讨论数组。

<强>摘要

创建一个数组,它采用固定大小,而不是像你想要的那样添加数组列表。

Source

答案 1 :(得分:2)

对于我的情况,我不得不请求数组的长度

  if (bill_inputs.length>0){
                    textViewInputType.setText(bill_inputs[0].getInput_name());

                }

所以在你做任何事情之前检查长度

答案 2 :(得分:0)

如果您更改了数据库架构并且未更新数据库版本,则将导致上述错误。

相关问题