我在以下情况下需要有关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数组列表中存储的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开发的新手,显然我做错了什么,那么有没有更好的方法呢?任何帮助将不胜感激。

最佳答案

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

09-10 14:01
查看更多