【问题标题】:Firebase multiple where clauses using equalsToFirebase 使用 equalsTo 的多个 where 子句
【发布时间】:2017-07-19 07:12:03
【问题描述】:

我有一个我想从 Firebase 下载的所有密钥的列表。为此,我正在使用此代码:

Query newUidsQuery = FirebaseDatabaseHelper.getUsersReference();
newUidsQuery.orderByChild(DATABASE_NODE_USER_UID);
        for (String uid : uidList) {
            newUidsQuery.equalTo(uid);
        }

newUidsQuery.addListenerForSingleValueEvent();

这是我目前的结构:

{
  "users" : {
    "5mvsiNKz2hO4rmcDDNskv855dkB3" : {
      "contacts" : [ "GG8JeRNOIhb1qloZb4oCAb7Jd593", "gc0ci7Jgu2QpVYFbeiMJfVy1WHP2" ],
      "contactsHash" : -224276455,
      "email" : "lung.razvan@yahoo.com",
      "name" : "Razvan Cristian Lung",
      "photoUrl" : "https://lh5.googleusercontent.com/-bItm3-ieAtU/AAAAAAAAAAI/AAAAAAAALZo/mtPyAMohOvg/s96-c/photo.jpg",
      "uid" : "5mvsiNKz2hO4rmcDDNskv855dkB3"
    },
    "GG8JeRNOIhb1qloZb4oCAb7Jd593" : {
      "contactsHash" : 1,
      "email" : "andralung@yahoo.com",
      "name" : "Andra Florina Lung",
      "photoUrl" : "https://lh4.googleusercontent.com/-po2yelyi3mY/AAAAAAAAAAI/AAAAAAAAQ5s/ROefxP6Q1oA/s96-c/photo.jpg",
      "uid" : "GG8JeRNOIhb1qloZb4oCAb7Jd593"
    },
    "gc0ci7Jgu2QpVYFbeiMJfVy1WHP2" : {
      "contactsHash" : 1,
      "email" : "lung_razvan2100@yahoo.com",
      "name" : "Lung Razvan",
      "photoUrl" : "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100/15390976_1192204140865562_3397773349261436244_n.jpg?oh=d61795a8df67d3e9c5ddf60557e9e60c&oe=59270863",
      "uid" : "gc0ci7Jgu2QpVYFbeiMJfVy1WHP2"
    }
  }
}

问题是,当我尝试仅获取具有特定键的条目时,我还会在“联系人”字段中获取具有该键作为值的其他条目。

【问题讨论】:

  • 尝试将orderByChild 替换为orderByKey()。这就是你想要的结果吗?
  • 同样的结果,其实这是我第一次尝试

标签: android firebase firebase-realtime-database


【解决方案1】:

当您调用orderBy... 或其他方法时,它会返回一个新查询。因此,您现在为每个不使用的 uid 创建一个新查询。要保留它,您需要newUidsQuery = newUidsQuery.equalTo(uid)

但这还不能解决问题,因为查询只能对单个属性和值进行排序/过滤。见Query based on multiple where clauses in firebase

更好的消息是,这在这里无关紧要,因为您一次只能检索一个项目。与您可能期望的不同,这并不比一次性检索它们慢得多。请参阅Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly 或观看#AskFirebase 的这一集:https://youtu.be/66lDSYtyils?t=1m49s

【讨论】:

  • 感谢您的回答。我在周末课程中学习了 Firebase,我非常喜欢它,并且看到了 FireCast。再次感谢。问题是我需要全部搞定,因为我想更新 RecyclerView 适配器。而且我不想每次有新商品到达时都发送和更新请求。但如果这不可能,我会坚持一一打电话。再次感谢,泡芙! “Evanghelos”:))
  • 大声笑...... Evanghelos 的事情会困扰我多年。 :-) 。 FirebaseUI 有一个用于处理这些连接的示例适配器:github.com/firebase/FirebaseUI-Android/tree/master/…
猜你喜欢
  • 1970-01-01
  • 2017-06-26
  • 2021-08-06
  • 2016-10-23
相关资源
最近更新 更多