【问题标题】:How to query a list of strings instead of a single string and get a list of results from Firestore [duplicate]如何查询字符串列表而不是单个字符串并从 Firestore 获取结果列表 [重复]
【发布时间】:2019-11-21 04:00:48
【问题描述】:

我有一个本地存储在字符串列表中的用户最喜欢项目的 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);

        }
    });

}

【问题讨论】:

  • 我不相信有。我很确定你必须做一个 for 循环并将数据传递给你的适配器并通知它,或者继续做你正在做的事情。
  • 每次在适配器中重复数据获取有点开销吧?

标签: java android firebase google-cloud-firestore firebaseui


【解决方案1】:

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

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

编辑:

您应该遍历字符串列表并创建 Task 对象。

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

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

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

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

【讨论】:

  • 抱歉,我不太明白。我在 List 中的 ID 列表,我需要以 List 的形式获取结果列表。我的收藏名称是“上传”,应该匹配的文档字段是“imageId”
  • 还要检查副本,它是完全一样的,对吧?
  • 但是在这种情况下我们应该传递一个字段及其对应的值作为查询,对吧?
  • 请查看我的更新答案并告诉我它是否有效。
猜你喜欢
  • 2013-01-15
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多