随机数据库游标大小为0

时间:2018-09-22 09:22:42

标签: android android-sqlite sqliteopenhelper

我的应用出现问题,有时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;
}

这是我的logcat:

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

然后当它不起作用时,这是日志记录器:

D/DatabaseHelper: Vendor name: ABC Cursor size 0

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

我的代码需要改进吗?

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

1 个答案:

答案 0 :(得分:0)

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

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