【问题标题】:Make a query on Firebase database for Android对 Android 的 Firebase 数据库进行查询
【发布时间】:2017-01-25 21:41:05
【问题描述】:

我知道有很多类似的问题,但没有人有我正在寻找的答案,我咨询的所有问题都有关于 childrenEvetListeners 的答案......

我的问题要简单得多。这是我的 Firebase 数据库:

我的问题是:如何进行查询,检查用户名为“fofof”的用户是否存在?

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:

你有一个混合结构,这使事情变得复杂。但是,如果您只是在 /users/-K.... 下寻找匹配项,则可以通过以下方式找到匹配项:

Query query = ref.child("users").orderByChild("User/username").equalTo("fofof");
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            Log.i(TAG, "fofof exists and is stored under key "+userSnapshot.getKey());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
    }
});

关于您当前设置的一些警告:

  • 您将用户存储在推送 ID 下。虽然推送 ID 非常适合没有自然键且您希望按时间顺序存储的集合,但最好将用户存储在 UID 下。所以例如/users/s5iu...
  • 您已将用户信息嵌套得比需要的更深一层。虽然这可行,但我会删除您树中的 User 级别。
  • 您在/users 下有一个用户,而其他用户则存储在更深一层。创建这样的混合模型是个坏主意。

【讨论】:

  • 非常感谢弗兰克,你知道推送 ID 被插入是因为我使用 push() 函数来创建新节点,我试图避免使用 push(),但在那种情况下每次插入新用户它会覆盖现有节点并且没有创建新节点,有没有办法在不使用 push() 的情况下创建新节点(在我的情况下为用户)??
  • ref.child("users").child(userId).setValue(...)
猜你喜欢
  • 2018-12-03
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多