首页 文章

FireBase规则indexOn问题

提问于
浏览
1

我正在尝试使用firebase查询获取所有用户的电子邮件,如下所示

private void searchUserByEmail(final String searchText) {  
        DatabaseReference mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
        Query query = mFirebaseDatabaseReference.child(Constants.FB_TABLE_USERS).orderByChild(Constants.FB_EMAIL).equalTo(searchText);
        query.addListenerForSingleValueEvent(new ValueEventListener() {
}}

在搜索任何不在列表中的电子邮件时,我在控制台中收到警告消息

W / PersistentConnection:pc_0 - 使用未指定的索引 . 考虑在table_users中添加'“.indexOn”:“email”'到您的安全和Firebase数据库规则,以获得更好的性能

我在FireBase中的规则是

{
  "rules": {
    ".read" : "auth != null",
    ".write" : "auth != null",
    "table_users": {
      ".indexOn": ["email"]
    }
  }
}

这是我的用户表截图
enter image description here

1 回答

  • 2

    你应该从 ".indexOn" 值中删除括号

    "table_users": {
      ".indexOn": "email"
    }
    

    query.addListenerForSingleValueEvent(new ValueEventListener() {
    
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                String email = snapshot.child("email").getValue();
                System.out.print(email);
            }
        }
    });
    

相关问题