2017-08-31 79 views
0

我需要幫助與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類有兩個微調:在producerproduct微調。我想在按鈕單擊時將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開發,並明確有件事我做錯了,所以有這種更好的方法?任何幫助將不勝感激。

+0

爲什麼需要'cursor.isAfterLast()== false'? –

+0

hey John,cursor.isAfterLast()== false以防止無限循環。然後moveToNext將迭代光標中的所有行,但我可能錯了 –

回答

3

您忘記調用getInventory方法,因此checkInventory列表爲空。

+0

更像 ArrayList checkInventory = db.getInventory(primaryKey); ?? 這樣就夠了嗎? –

+0

您的getInventory方法沒有任何返回值。你可能應該把它叫做'db.getInventory(primaryKey);' –

+0

有趣的是,我沒有得到錯誤,但我的getButton不再工作,它的可點擊但沒有響應,我錯過了什麼,又是什麼? –

相關問題