Android SQLiteDatabase Order By Id跳过第一个元素

Android SQLiteDatabase Order By Id跳过第一个元素,android,sqlite,Android,Sqlite,从Android上的SQLite数据库中提取数据有一个非常奇怪的问题。下面是我的方法,它从表条目中获取所有条目,并在循环中迭代它们,将它们放在列表视图中 在我想改变这一行之前,它工作得很好 游标c=readableDatabase.rawQueryselect*from entries,null; 对于这一点: 游标c=readableDatabase.rawQueryselect*按ID顺序从条目中选择DESC,null; 所以在更改之后,我看不到第一个元素。不知道那里发生了什么。下面是该方

从Android上的SQLite数据库中提取数据有一个非常奇怪的问题。下面是我的方法,它从表条目中获取所有条目,并在循环中迭代它们,将它们放在列表视图中

在我想改变这一行之前,它工作得很好 游标c=readableDatabase.rawQueryselect*from entries,null; 对于这一点: 游标c=readableDatabase.rawQueryselect*按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); 任何帮助都将不胜感激

这是您的问题:

    c.moveToFirst();

    // other code

    while (c.moveToNext()) {
跳过第一个元素后,moveToFirst将光标放在第一个位置,然后while将另一个位置移动到第二个位置


如果不检查返回类型,请先删除moveToFirst,或者无论如何都要对其执行任何操作。或者将while循环更改为do-while,但这假设您始终至少有一个结果。我建议删除c.moveToFirst。

删除moveToFirst方法,这样效果很好