Firebase UI回收器适配器中的不同子集合

问题描述 投票:1回答:1

我正在尝试获取不同的子集合,并使用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:随时以任何方式发表评论以改善我的数据库。我是新来的!

java android firebase google-cloud-firestore firebaseui
1个回答
1
投票

根据答案:

是,就是这样!

关于这个问题:

所以您想在单个查询中从data/userID/imagesdata/userID/pdfs中获取数据?

答案是,你不能。即使两个集合中的对象相同,也无法在单个查询中从两个不同的集合中获取数据。 Firestore中的查询很浅,这意味着您只能从运行查询的集合中获取文档。如果需要从两个集合中获取文档,则需要创建两个单独的查询。在Android中,您可以借助Tasks whenAllSuccess()方法来实现此目标,如以下帖子中我的回答所述:

但是,有一种解决方案可以从多个集合中获取数据,但是所有集合/子集合都应使用相同的名称。为此,请参阅有关Firestore collection group queries使用的官方文档。

© www.soinside.com 2019 - 2024. All rights reserved.