如何查询字符串列表而不是单个字符串并从 Firestore 获取结果列表



我有一个本地存储在字符串列表中的用户收藏项目的ID列表。现在,当用户打开他最喜欢的部分时,应用程序需要从Cloud Firestore获取本地收藏夹列表中的所有项目。现在我看到的只是接受字段和字符串的查询(在我的情况下,一次只有一个收藏项的 ID(。

有没有办法在单个操作中将 ID 列表作为查询传递并获取结果。我现在正在做的是将 ID 传递给RecylerView适配器并在BindViewHolder中一一获取它。

@Override
public void onBindViewHolder(final ImageViewHolder holder, int position) {
    db.whereEqualTo("imageId",mUploads.get(position))
            .get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
        @Override
        public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
            List<Upload> uploadsList = queryDocumentSnapshots.toObjects(Upload.class);
            Upload uploadCurrent = uploadsList.get(0);
            holder.materialCardView.setCardBackgroundColor(Color.parseColor(uploadCurrent.getImageColor()));
            Glide.with(mContext)
                    .load(uploadCurrent.getImageUrl())
                    .transition(DrawableTransitionOptions.withCrossFade())
                    .centerCrop()
                    .into(holder.imageView);
        }
    });
}

有没有办法在单个操作中将 ID 列表作为查询传递并获取结果。

不,没有。不能将列表或字符串数组传递给查询并一次性获取结果。在Query对象上调用get()时,返回的对象类型为 Task 。遍历您的列表,创建这些 Task 对象并将其全部添加到List<Task<DocumentSnapshot>>然后将该列表传递给 Tasks 的 whenAllSuccess(( 方法,正如我在以下帖子中的回答中所解释的那样:

  • Android Firestore 将文档引用数组转换为 List

编辑:

应循环访问字符串列表并创建 Task 对象。

Task<DocumentSnapshot> documentSnapshotTask = collRef.document(stringFromList).get();

因此,在每次迭代时,将 Task 对象添加到任务列表中:

List<Task<DocumentSnapshot>> tasks = new ArrayList<>();

最后,只需将tasks列表传递给whenAllSuccess()方法,就是这样。

相关内容

  • 没有找到相关文章

最新更新