newbie
newbie

Reputation: 25

Problems with database

I have a problem with getting Shop from database: Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

getShop function in ShopHandler.java

    Shop getShop(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_SHOPS, new String[] { KEY_ID,
                KEY_SHOP }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Shop shop = new Shop(Integer.parseInt(cursor.getString(0)), cursor.getString(1)); //first problem place
        return shop;
    }

and part of procedure in MainClass:

public void AddToList(View view)
{
    EditText search = (EditText)findViewById(R.id.editTextsearch);
    String SearchProduct = search.getText().toString(); 
    int l = 0;
    int p = 0;
    ShopHandler sh = new ShopHandler(this);
    String[] Shops = new String[sh.getShopCount()];
    float[] prices = new float[sh.getShopCount()];
    for(int i=0;i<=sh.getShopCount();i++)
    {
        Shop shop = sh.getShop(i); //hear is second problemplace
        ShopName = shop.getShop();
        ProductHandler ph = new ProductHandler(this);
        for(int j=0;j<ph.getProductsCount();j++)
        {
            if(ph.getProduct(j).getName()==SearchProduct)
            {
                Shops[++l]=ShopName;
                prices[++p]=ph.getProduct(j).price;
            }
        }
    }

Upvotes: 0

Views: 48

Answers (2)

laalto
laalto

Reputation: 152787

The cursor is empty. Check moveTo...() return value before accessing row data:

Shop shop = null;
if (cursor.moveToFirst()) {

    shop = new Shop(Integer.parseInt(cursor.getString(0)), cursor.getString(1)); //first problem place
}
cursor.close();
return shop;

This causes the exception. Why the cursor is empty is likely because of the off-by-one here:

for(int i=0;i<=sh.getShopCount();i++)

Either start counting from 1 or change <= to <, depending on your data.

Upvotes: 2

Jeremy D
Jeremy D

Reputation: 4855

This is most likely the issue:

for(int i=0;i<=sh.getShopCount();i++)

should be for(int i=0;i < sh.getShopCount();i++)

You will be off-by-one if you keep your first loop to stop at sh.getShopCount()

Upvotes: 1

Related Questions