android - 随机数据库游标大小为 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。
解决方案
我已经确认,从 Firestore(异步)加载的数据有时不会在再次读取数据库之前及时完成,因此导致大小为 0,因为该方法在仍在写入时尝试读取。
解决方法是等待它首先结束,然后再再次阅读。
推荐阅读
- node.js - Heroku 日志中的“服务”时间是什么意思?
- r - 如何避免 shiny.router 更改我的闪亮仪表板(标题和侧边栏)的颜色?
- angular - Spring OKta 需要完全身份验证才能访问 Angular 7 中的登录页面
- c# - 需要从 LINQ 中的连接列中获取总和
- c# - 如果我将密码作为字符串而不是安全字符串传递,是否总是不安全?
- c# - 解决 .Net core 2.0 中抽象类的依赖注入
- java - 通过地图添加第二个内部循环
- reactjs - 如何修复 reactjs 中的引导卡边框问题
- python - 在 Pandas 的列中添加递增的日期值
- amazon-web-services - 通过 Codeship 部署代码 toe Lambda