你见过的最简单的错误

时间:2014-01-27 22:13:17

标签: android database

我的MainClass.java

     int l = 0;
        int p = 0;
        ShopHandler sh = new ShopHandler(this);
        int u = sh.getShopCount();
        String[] Shops = new String[u];
        String[] ShopsApproved = new String[u];
        for (int i=0;i<u;i++)
        {
            Shops[i]=sh.getShop(i+1).getShop();
        }
        float[] prices = new float[u];
        for(int i=0;i<u;i++)
        {
            Shop shop = sh.getShop(i+1);
            ShopName = shop.getShop();
            ProductHandler ph = new ProductHandler(this);
            int o = ph.getProductsCount();
            for(int j=0;j<o;j++)
            {
                Product prod = ph.getProduct(j+1);          //Always null
                String productname = prod.getName();
                if(productname==SearchProduct)
                {
                    ShopsApproved[++l]=ShopName;
                    prices[++p]=ph.getProduct(j+1).getPrice();
                }
            }
        }

将我的ProductHandler.java

分开
        // Getting single product
        Product getProduct(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_PRODUCTS, new String[] { KEY_NAME,
                KEY_AMOUNT, KEY_TYPE, KEY_PRICE }, KEY_NAME + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        Product product = null;                          //Start
        if (cursor.moveToFirst()) {                      

            product = new Product(cursor.getString(0), Float.parseFloat(cursor.getString(1)),
                    Integer.parseInt(cursor.getString(2)), Float.parseFloat(cursor.getString(3)));
        }
        cursor.close();
        return product;                              //end
    }

那么问题是什么?当您查找时,您将看到标记为注释的代码。它总是返回null到MainClass中也标记的代码。如果您知道问题所在,请将其写入答案。 产品数据库:

Name    Amount   Type   Price 
Cheese   1.0      1     5.34 
Milk     1.0      2     3.67 
Cola     2.0      2     7.05

2 个答案:

答案 0 :(得分:1)

人们只能在不知道实际表格及其数据的情况下进行推测。但最有可能的是,查询没有返回任何记录,导致cursor.moveToFirst()始终返回false。

答案 1 :(得分:1)

很可能你的光标返回null结果是因为你在查询中寻找一个名字,但是传递一个ID:

KEY_NAME + "=?",
new String[] { String.valueOf(id) },

您的数据是否包含“_id”列或索引?