我的应用出现问题,有时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。
答案 0 :(得分:0)
我已经确认从Firestore(异步)加载的数据有时无法在再次读取数据库之前及时完成,因此导致大小为0,因为该方法在仍在写入时尝试读取。
一种解决方法是先等待它结束,然后再读一次。