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

Java Firestore-嵌套集合的自定义对象,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,这个问题听起来可能很奇怪。我将以下自定义对象命名为ItemUser: 在onCompletedListener中,我得到的自定义对象如下所示: ItemUser mUser = task.getResult().toObject(ItemUser.class); 现在,当我试图获取用户_成就的大小时,一个NullPointerException弹出窗口说我无法获取null引用的大小 因此,用户_成就为空。我认为我在自定义对象中定义用户成就的方式是导致此异常的原因 问题是:在不调用数据库只计算大

这个问题听起来可能很奇怪。我将以下自定义对象命名为ItemUser:

在onCompletedListener中,我得到的自定义对象如下所示:

ItemUser mUser = task.getResult().toObject(ItemUser.class);
现在,当我试图获取用户_成就的大小时,一个NullPointerException弹出窗口说我无法获取null引用的大小

因此,用户_成就为空。我认为我在自定义对象中定义用户成就的方式是导致此异常的原因

问题是:在不调用数据库只计算大小的情况下,如何做到这一点

我有一个主要的自定义对象ItemUser,它的子对象是“健康的”,除了user_成就,因为它是以列表的方式定义的

那么,有什么建议可以跨越这个问题吗

在不调用数据库只计算大小的情况下,如何做到这一点

不,因为Cloud Firestore是一个实时数据库,可以添加或删除项目,所以要获得列表的大小,需要查询数据库并使用get调用

如果要计算可添加到列表的集合下的文档数,请参阅我的回答,其中我已解释了task.getResult.size可以帮助您解决问题

编辑:


我应该声明我在文档中使用get,这意味着我将使用OnCompleteListener而不是QuerySnapshot。因此,size不能作为方法使用。为什么使用OnCompleteListener而不是OnCompleteListener?因为我正在收听第一个示例mDB.collectionCOLLECTION\u NAME.documentUSER\u ID.get中的文档。使用QuerySnapshot显示无法解决参数错误类型的错误。您应该使用更新答案中的代码。也不要忘记添加相应的依赖项。
mDB.collection("COLLECTION_NAME").document("USER_ID").get()
ItemUser mUser = task.getResult().toObject(ItemUser.class);
mDB.collection("COLLECTION_NAME").document("USER_ID").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            int size = task.getResult().size();
            Log.d(TAG, String.valueOf(size));
        }
    }
});