在Android上从SQLite数据库中提取数据时遇到一个非常奇怪的问题。这是我的方法,它从表entries
获取所有条目,并通过循环迭代它们,将它们放在列表视图中。
它工作正常,直到我想改变这一行
Cursor c = readableDatabase.rawQuery("select * from entries", null);
到这一个:
Cursor c = readableDatabase.rawQuery("select * from entries order by ID DESC", null);
所以在改变后我没有看到第一个元素。不确定那里会发生什么。这是该方法的源代码。
EntryHelper entryHelper = new EntryHelper(this); SQLiteDatabase readableDatabase = entryHelper.getReadableDatabase(); // NOTE: needs to be changed to order by ID... // Cursor c = readableDatabase.rawQuery("select * from entries", null); c.moveToFirst(); ArrayList productsList = new ArrayList(); ProductsArrayAdapter productsArrayAdapter = new ProductsArrayAdapter(this, productsList); while (c.moveToNext()) { Integer entryIdIndex = c.getColumnIndexOrThrow(Schema.Entry.ID); Integer entryBarcodeIndex = c.getColumnIndexOrThrow(Schema.Entry.COLUMN_NAME_BARCODE); Integer entryQuantityIndex = c.getColumnIndexOrThrow(Schema.Entry.COLUMN_NAME_QUANTITY); Integer entryId = c.getInt(entryIdIndex); String entryBarcode = c.getString(entryBarcodeIndex); String entryQuantity = c.getString(entryQuantityIndex); Product lineItemProduct = new Product(entryId, entryBarcode, entryQuantity); productsList.add(lineItemProduct); Toast toast = Toast.makeText(this, lineItemProduct.toString(), Toast.LENGTH_SHORT); toast.show(); } productsListView = (ListView) findViewById(R.id.productsList); productsListView.setAdapter(productsArrayAdapter);
任何帮助将不胜感激
答案 0 :(得分:4)
这是你的问题:
c.moveToFirst();
// other code
while (c.moveToNext()) {
你跳过第一个元素,moveToFirst
将光标放在第一个位置,然后你的另一个位置移动到第二个位置。
删除moveToFirst()
(您不检查返回类型或无论如何都要执行此操作)。或者将while
循环更改为do while
,但这假设您始终至少有1个结果。我建议删除c.moveToFirst
。