首页 > 解决方案 > 随机数据库游标大小为 0

问题描述

我的应用程序出现问题,有时 Arraylist 会显示在 recyclerview 上,有时却不会。Arraylist 由 DB SQLLite 游标填充。

public List<OrderItem> getAllOrders(String vendor) {
    List<OrderItem> ordersList = new ArrayList<>();

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(
            LocalOrderQty.TABLE_NAME,
            new String[]{"*"},
            LocalOrderQty.COLUMN_VENDOR + " = ?",
            new String[]{vendor},
            null,
            null,
            null);

    Log.d(TAG, "Vendor name: " + vendor + " Cursor size " + cursor.getCount());

    if (cursor.moveToFirst()) {
        do { //(String barcode, String imageURL, String name, Integer quantity, String unit, String vendor)
            ordersList.add(new OrderItem(
                    cursor.getString(1),
                    cursor.getString(4),
                    cursor.getString(2),
                    cursor.getInt(3),
                    cursor.getString(5),
                    cursor.getString(0)
            ));
            Log.d(TAG, "cursor1getstring: " + cursor.getString(1));
        } while (cursor.moveToNext());
    }

    cursor.close();
    db.close();
    return ordersList;
}

这是我的日志:

D/DatabaseHelper: Vendor name: ABC Cursor size 5
D/DatabaseHelper: cursor1getstring: 9559001380099
cursor1getstring: 9559001380105
cursor1getstring: 9559001380792
cursor1getstring: 9559001380815

然后当它不起作用时,这是 logcat:

D/DatabaseHelper: Vendor name: ABC Cursor size 0

即使当我从 SQL 浏览器打开数据库文件时,肯定有数据并且已填充。

我的代码有什么需要改进的地方吗?

这个问题是随机的,有时会显示列表,有时会显示为 0。

标签: androidandroid-sqlitesqliteopenhelper

解决方案


我已经确认,从 Firestore(异步)加载的数据有时不会在再次读取数据库之前及时完成,因此导致大小为 0,因为该方法在仍在写入时尝试读取。

解决方法是等待它首先结束,然后再再次阅读。


推荐阅读