Java Firestore-嵌套集合的自定义对象
这个问题听起来可能很奇怪。我将以下自定义对象命名为ItemUser: 在onCompletedListener中,我得到的自定义对象如下所示: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 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));
}
}
});