【问题标题】:java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 - Database Reading - Androidjava.lang.ArrayIndexOutOfBoundsException:长度=0; index=0 - 数据库读取 - Android
【发布时间】:2015-05-22 20:23:25
【问题描述】:

我创建了一个从数据库读取数据并将其放入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 开始。

我真的不明白问题出在哪里,所以如果有人可以帮助我,我将不胜感激。 提前致谢!

【问题讨论】:

  • String[] medicines = {}; 应该是 String[] medicines = new String[cursor.getCount()]; 并且您可能想要检查负值
  • @Blackbelt 谢谢,它解决了我的问题!
  • @Blackbelt orb 那就是答案材料!不要那么害羞
  • @codeMagic orb 我一直在问自己为什么
  • @codeMagic 只是好奇.. 什么是“球体”?

标签: java android arrays exception indexoutofboundsexception


【解决方案1】:
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 

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

进行初始化

通知

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

总结

创建的一个数组需要固定大小,不像数组列表可以随意添加。

Source

【讨论】:

    【解决方案2】:

    对于我的情况,我必须请求数组的长度

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

    所以对于你的情况,在做任何事情之前检查长度

    【讨论】:

      【解决方案3】:

      如果你更改了数据库架构并且没有更新数据库的版本,则会导致上述错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-29
        • 2014-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-18
        • 2014-01-30
        • 2014-06-20
        相关资源
        最近更新 更多