如何查询字符串列表而不是单个字符串并从 Firestore 获取结果列表
How to query a list of strings instead of a single string and get a list of results from 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);
}
});
}
Is there a way to pass the list of IDs as a Query in a single operation and get the result.
没有,没有。您不能将列表或字符串数组传递给查询并一次性获得结果。在 Query
对象上调用 get()
时,返回的对象类型为 Task
。遍历您的列表,创建这些任务对象并将它们全部添加到 List<Task<DocumentSnapshot>>
,然后将该列表传递给任务的 whenAllSuccess() 方法,正如我在以下 post 的回答中所解释的那样:
编辑:
您应该遍历字符串列表并创建任务对象。
Task<DocumentSnapshot> documentSnapshotTask = collRef.document(stringFromList).get();
因此在每次迭代时将 Task 对象添加到任务列表中:
List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
最后只需将 tasks
列表传递给 whenAllSuccess()
方法即可。
我有一个用户最喜欢的项目的 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);
}
});
}
Is there a way to pass the list of IDs as a Query in a single operation and get the result.
没有,没有。您不能将列表或字符串数组传递给查询并一次性获得结果。在 Query
对象上调用 get()
时,返回的对象类型为 Task
。遍历您的列表,创建这些任务对象并将它们全部添加到 List<Task<DocumentSnapshot>>
,然后将该列表传递给任务的 whenAllSuccess() 方法,正如我在以下 post 的回答中所解释的那样:
编辑:
您应该遍历字符串列表并创建任务对象。
Task<DocumentSnapshot> documentSnapshotTask = collRef.document(stringFromList).get();
因此在每次迭代时将 Task 对象添加到任务列表中:
List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
最后只需将 tasks
列表传递给 whenAllSuccess()
方法即可。