Android - 如何修复java.lang.IndexOutOfBoundsException错误:索引:0,大小:0

时间:2017-08-31 14:20:09

标签: java android sqlite arraylist

我在IndexOutOfBoundsException错误时需要有关以下情况的帮助。我有两个类,一个是扩展SQLiteOpenHelper的数据库类,另一个是比较从数据库类查询的值和在微调器上进行的一些选择。

因此,在数据库类中,我有两个执行数据库查询的方法:getInventory()getStock()

getInventory()方法首先查询db,然后将游标值添加到arraylist checkInventory。然后getStock()设置arraylist的返回方法。

List<String> checkInventory = new ArrayList<>();

public void getInventory(int primaryKey) {

    // Select All Query
    String selectQuery = "Select * FROM " + TABLE_PRODUCT + " WHERE " + PRODUCER_FK + " =  \"" + primaryKey + "\"";
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.rawQuery(selectQuery, null);
    cursor.moveToFirst();

    while (cursor.isAfterLast() == false) {
        String productName = cursor.getString(1);
        String productQuantity = String.valueOf(cursor.getInt(3));
        String productPrice = String.valueOf(cursor.getInt(2));

        checkInventory.add(productName);
        checkInventory.add(productQuantity);
        checkInventory.add(productPrice);

        cursor.moveToNext();
    }
}
    public String getStock(int pos) {
        return checkInventory.get(pos);
    }

然后在ProductInventory类中有两个微调器:producerproduct微调器。我想在点击按钮时将product微调器上的值与存储在数据库类productName arraylist中的checkInventory进行比较。如果值匹配,则产品价格,产品数量以及生产者和产品纺纱厂的价值应显示在xml文件中。这是班级:

// Adding click listener to Get button.
public void addListenerOnGet() {
    getBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            // database handler
            FISP_SQLiteDB db = new FISP_SQLiteDB(getApplicationContext());

            String name = db.getStock(0);
            String quantity = db.getStock(1);
            String price = db.getStock(2);

            if (name==product.getSelectedItem()){
                Intent i = new Intent(ProductInventory.this, Product_Details.class);
                i.putExtra("ProducerValue", producer.getSelectedItem().toString());
                i.putExtra("ProductValue", product.getSelectedItem().toString());
                i.putExtra("ProducerPrice", price);
                i.putExtra("ProductDetails", quantity);

                startActivity(i);
            }
        }
    });
}

当然还有另一个类在xml上设置文本,依此类推。但是,当我运行应用程序时,我收到一个异常:java.lang.IndexOutOfBoundsException: Index: 0, Size: 0.错误指向数据库类。

public String getStock(int pos) {
        return checkInventory.get(pos);
    }

以及其他类

中的这个
String name = db.getStock(0);
String quantity = db.getStock(1);
String price = db.getStock(2);

我是Android开发的新手,显然有一些我做错了,所以有更好的方法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您忘记调用getInventory方法,因此checkInventory列表为空。