【问题标题】:how to use firebase query in if else condition如何在 if else 条件下使用 firebase 查询
【发布时间】:2016-07-17 23:49:59
【问题描述】:

这里是按钮的 onclick 代码,我想要做的是点击他的按钮应用程序必须从 firebase 数据库中获取电子邮件,如果成功,它必须显示在编辑文本中,找到的电子邮件在编辑中显示 -找不到电子邮件的文本,在这里我可以获取电子邮件并显示在编辑文本上找到的电子邮件但无法显示找不到电子邮件(代码的其他部分)而是我在控制台中得到这个

W/PersistentConnection: pc_0 - Using an unspecified index. Consider adding '".indexOn": "email"' at /users/users to your security and Firebase rules for better performance

conbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Firebase ref = new Firebase("https://(refrence of firebse database)");


            final String searchEmail = emailcon.getText().toString().trim();
            final Query query =   ref.orderByChild("email").equalTo(searchEmail);

            query.addValueEventListener(new ValueEventListener()
            {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot)
                {

                    for (DataSnapshot child : dataSnapshot.getChildren())
                    {
                        final String fetchEmail;
                        Map<?, ?> value = (Map<?, ?>) child.getValue();
                        Log.d("main2activity ","User data : "+ value);
                        fetchEmail = (String) value.get("email");
                        Log.d("main2activity ","User email : "+ fetchEmail);
                        if (searchEmail.equals(fetchEmail))
                        {
                            emailcon.setText("email found hurray "+query.getRef());
                        }
                        else
                        {
                            emailcon.setText("still no email found!!");
                        }
                    }
                }
                @Override
                public void onCancelled(FirebaseError firebaseError) {

                }
            });
        }
    });

【问题讨论】:

  • 查询只返回匹配邮件的记录。很明显,else 子句永远不会被执行。而是检查查询是否返回了记录。
  • 如何,帮助一些代码,我检查了查询是否不为空,但发现查询永远不会为空
  • @Henry:这是一个 Value 监听器,当没有匹配的孩子时它也会触发。
  • @FrankvanPuffelen 确定,但不会有 searchEmail.equals(fetchEmail) 给出错误的记录。
  • 正确。请参阅下面我的回答,了解如何使用这些知识。

标签: java android if-statement firebase firebase-realtime-database


【解决方案1】:

由于您正在触发查询,您将获得一个可以包含 0 个或多个子级的快照。如果它包含任何孩子,这些孩子将拥有您在equalTo()中使用的电子邮件地址

您需要稍微不同地处理onDataChange()

query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.hasChildren()) {
            for (DataSnapshot child : dataSnapshot.getChildren()) {
                emailcon.setText("email "+searchEmail+" found at URL "+child.getRef());
            }
        }
        else {
            emailcon.setText("still no email found!!");
        }
    }
    @Override
    public void onCancelled(FirebaseError firebaseError) {
    }
});

【讨论】:

  • 感谢 Frank van Puffelen,您的代码就像魅力一样,但在控制台中,无论我是否收到电子邮件,上述错误仍然出现,再次感谢对我帮助很大
  • 警告表示需要添加索引。它从字面上告诉你要添加什么。请参阅firebase.google.com/docs/database/security/indexing-data 或搜索错误消息(之前已询问过此问题)。
猜你喜欢
  • 2023-02-06
  • 2019-04-25
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
相关资源
最近更新 更多