这个问题听起来很奇怪。我有一个名为Object
的以下自定义ItemUser
:
private UserInfo user_info;
private List<UserAchievement> user_achievements;
两个字段都具有getter和setter。我的Firestore的数据库如下所示:
我想获得List
的大小,而不是重新调用数据库并从单独的调用中获取集合的大小,这将消耗大量资源并花费大量时间(3-4s)。
首先,我使用以下方法获取数据:
mDB.collection("COLLECTION_NAME").document("USER_ID").get()
在onCompletedListener
内部,我得到了如下的自定义对象:
ItemUser mUser = task.getResult().toObject(ItemUser.class);
现在,当我尝试获取user_achievements
的大小时,出现一个NullPointerException
弹出窗口,提示我无法获取空引用的大小。
因此user_achievements
为空。我认为我在自定义对象中定义user_achievements
的方式就是发生此异常的原因。
问题是:如何在不调用数据库仅计算大小的情况下做到这一点?
我拥有主要的自定义对象ItemUser
,并且由于user_achievements
的定义方式,其子对象是“健康的” List<UserAchievement>
。
那么,有什么建议可以解决这个问题?
答案 0 :(得分:1)
怎么可能不调用数据库仅计算大小来做到这一点?
否,因为Cloud Firestore是实时数据库,可以添加或删除项目,所以要获取列表的大小,您需要查询数据库并使用get()
调用。
如果您要计算集合下的文档数(可以将其添加到列表中),请参阅此 post 的回答,其中我解释了{ {1}}可以帮助您解决问题。
编辑:
task.getResult().size()