Firestore-嵌套集合的自定义对象

时间:2018-07-11 00:18:11

标签: java android firebase google-cloud-firestore

这个问题听起来很奇怪。我有一个名为Object的以下自定义ItemUser

private UserInfo user_info;
private List<UserAchievement> user_achievements;

两个字段都具有getter和setter。我的Firestore的数据库如下所示:

enter image description here

我想获得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>

那么,有什么建议可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

怎么可能不调用数据库仅计算大小来做到这一点?

否,因为Cloud Firestore是实时数据库,可以添加或删除项目,所以要获取列表的大小,您需要查询数据库并使用get()调用。

如果您要计算集合下的文档数(可以将其添加到列表中),请参阅此 post 的回答,其中我解释了{ {1}}可以帮助您解决问题。

编辑:

task.getResult().size()