我在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
类中有两个微调器:producer
和product
微调器。我想在点击按钮时将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开发的新手,显然有一些我做错了,所以有更好的方法吗?任何帮助将不胜感激。
答案 0 :(得分:3)
您忘记调用getInventory方法,因此checkInventory列表为空。