我正在尝试获取不同的子集合,并使用Firebase-UI将其适应于我的RecyclerAdapter
。
[My Cloud Firestore设置如下:
user:(Collection)
uid1:(Document)
name, email(fields)
data:(Collection)
uid1:(Document)
images:(Collection)
document1
fields
pdf:(Collection)
document1
fields
所以我在想,我不知道如何用相同的模型查询不同的Collections并将它们改编成回收站适配器。
我的实际代码可以检索图像:
private void setupImages(){
Query query = fStore.collection("data").document(userID).collection("images"); //get images collection
FirestoreRecyclerOptions<Data> options = new FirestoreRecyclerOptions.Builder<Data>().setQuery(query,Data.class).build();
FirestoreRecyclerAdapter adapter = new ImageAdapter(options, getContext());
recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
recyclerView.setAdapter(adapter); //adapt the query to adapter
}
并且该类使用Data模型将数据绑定到视图。
我曾考虑过创建列表并添加项目,但是我认为这不是一个好方法,应该有其他选择。
问题:如何将不同的集合绑定到回收站适配器而不被替换?
PS:随时以任何方式发表评论以改善我的数据库。我是新来的!
根据答案:
是,就是这样!
关于这个问题:
所以您想在单个查询中从
data/userID/images
和data/userID/pdfs
中获取数据?
答案是,你不能。即使两个集合中的对象相同,也无法在单个查询中从两个不同的集合中获取数据。 Firestore中的查询很浅,这意味着您只能从运行查询的集合中获取文档。如果需要从两个集合中获取文档,则需要创建两个单独的查询。在Android中,您可以借助Tasks whenAllSuccess()方法来实现此目标,如以下帖子中我的回答所述:
但是,有一种解决方案可以从多个集合中获取数据,但是所有集合/子集合都应使用相同的名称。为此,请参阅有关Firestore collection group queries使用的官方文档。