【问题标题】:Different subcollections in a Firebase UI recycler adapterFirebase UI 回收器适配器中的不同子集合
【发布时间】:2020-04-12 10:45:14
【问题描述】:

我正在尝试使用 Firebase-UI 获取不同的子集合并使其适应我的 RecyclerAdapter

我的 Cloud Firestore 设置如下:

user:(Collection)
    uid1:(Document)
       name, email(fields)

data:(Collection)
    uid1:(Document)
       images:(Collection)
          document1
                   fields
       pdf:(Collection)
          document1
                  fields

所以我在想,不知道如何用相同的模型查询不同的Collection,并将它们适配到recycler适配器中。

我的实际代码可以检索图像:

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
}

并且该类将数据绑定到具有数据模型的视图。

我考虑过创建一个列表并添加项目,但我认为这不是一个好方法,应该有其他选择。

问题:如何将不同的集合绑定到回收器适配器而不被替换?

PS:请随时以任何方式发表评论以改进我的数据库。我是新人!

【问题讨论】:

  • “不同的集合”是什么意思?我只看到你指的是一个data/userID/images
  • 有 2 个不同的集合是数据的子集合。 data/userID/imagesdata/userID/pdfs,我错了吗?
  • 那么您想在单个查询中从data/userID/imagesdata/userID/pdfs 获取数据?
  • 是的,就是这样!
  • @Barrufet 我现在也面临同样的问题,但你可以使用 whereIn 函数加入他们,请参阅stackoverflow.com/questions/61162167/…

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


【解决方案1】:

根据答案:

是的,就是这样!

对于这个问题:

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

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

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

【讨论】:

  • 该死,这很不幸,因为每个集合都获得一个查询并将其添加到它只是替换它的回收器适配器,我是否应该更改数据库结构并将图像/pdf集合中的所有文档放在一个单一的集合,然后通过查询获取它们?
  • 是的,这是一种常见的做法,您应该继续这样做。请记住创建一个名为type 的属性并将imagepdf 存储在那里。要获取所有 image 对象,只需使用 wehereEqualTo("type", "image") 调用。
  • 非常感谢您的帮助,感谢您的耐心等待!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多