我有一个本地存储在字符串列表中的用户喜欢的项目的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);
}
});
}
答案 0 :(得分:2)
是否可以通过一次操作将ID列表作为查询传递并获得结果。
不,没有。您无法将列表或字符串数组传递给查询,也无法一次性获得结果。在get()
对象上调用Query
时,返回的对象的类型为Task
。遍历您的列表,创建那些Task对象,并将它们全部添加到List<Task<DocumentSnapshot>>
中,然后将该列表传递给Tasks的whenAllSuccess()方法,如以下帖子中我的回答所述:
编辑:
您应该遍历字符串列表并创建Task对象。
Task<DocumentSnapshot> documentSnapshotTask = collRef.document(stringFromList).get();
因此,在每次迭代时,将Task对象添加到任务列表中:
List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
最后,只需将tasks
列表传递给whenAllSuccess()
方法即可。