我需要幫助與IndexOutOfBoundsException
錯誤以下情況。我有兩個類,一個是數據庫類,它擴展了SQLiteOpenHelper
,另一個比較了從數據庫類查詢的值和在微調器上進行的一些選擇。Android - 如何解決一個java.lang.IndexOutOfBoundsException錯誤:索引:0,大小:0
因此,在數據庫類中,我有兩種方法可以執行數據庫查詢:getInventory()
和getStock()
。
getInventory()
方法首先查詢db,然後將光標值添加到arraylist checkInventory
。然後getStock()
設置數組列表的返回方法。
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
微調控制器上的值與存儲在數據庫類checkInventory
arraylist中的productName
進行比較。如果這些值匹配,那麼產品價格,產品數量以及生產者和產品調整者的值應該以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開發,並明確有件事我做錯了,所以有這種更好的方法?任何幫助將不勝感激。
爲什麼需要'cursor.isAfterLast()== false'? –
hey John,cursor.isAfterLast()== false以防止無限循環。然後moveToNext將迭代光標中的所有行,但我可能錯了 –