【问题标题】:Invalid Firebase path: testuser@gnail.com. Firebase paths must not contain '.', '#', '$', '[', or ']'Firebase 路径无效:testuser@gnail.com。 Firebase 路径不得包含“.”、“#”、“$”、“[”或“]”
【发布时间】:2017-06-13 00:22:18
【问题描述】:

我正在创建一个注册页面,我想在其中检查输入的特定电子邮件或输入的手机是否已经存在。我认为 _emailText 作为字符串不被接受,但是如何获取电子邮件和密码。 下面是代码:

public boolean userExist(){
    //private Firebase mRef = new Firebase("https://abcdefgh.firebaseio.com/users/");  
    mRef.child(_emailText.getText().toString()).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                Toast.makeText(getBaseContext(), "Email already exist. Please choose a different one", Toast.LENGTH_SHORT).show();
                _emailText.setError("Email already exist. Please choose a different one");
                valid = false;
            }
            else{
                email = _emailText.getText().toString();
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

    mRef.child(_mobileText.getText().toString()).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                _mobileText.setError("Mobile Number already exist");
                valid = false;

            }
            else{
                mobile = _mobileText.getText().toString();

            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });


    return valid;
}

而数据库结构是这样的:

【问题讨论】:

  • 您的密钥不能包含句点,因为错误状态。用其他一些字符替换它们
  • 请编辑您的帖子以包含您的数据库结构
  • 结构是在“abcdefgh”里面有一个用户,如果你在其中注册然后电子邮件,手机和所有被创建,我想做的是在注册时获取这些电子邮件和手机并与我的编辑文本包含的内容进行比较。
  • 再次,请edit显示您的实际数据库数据
  • 基本上,您无法将mRef.child("testuser@gnail.com") 处的数据添加 作为元素的键。当然,您正在尝试做mRef.orderByChild("email").equalTo("testuser@gnail.com")

标签: android firebase firebase-realtime-database


【解决方案1】:

您的子密钥是5Ri...,而不是电子邮件

你正在寻找这个

mRef = new Firebase("https://abcdefgh.firebaseio.com/");
mRef.child("users")
    .orderByChild("email")
    .equalTo("testuser@gnail.com").addListener...( ) {

};

【讨论】:

  • 我这样做了,但是我点击了创建帐户按钮,它仍然会进入下一个活动,然后调用 Toast 错误。但它不应该,它应该首先进入监听器方法并调用监听器方法,而不应该首先进入下一个活动。
  • 如果您还有其他错误,请随时创建更多帖子,但此解决方案是针对您询问的特定错误
  • @divJ,您不能在 Firebase 侦听器之后编写返回。返回是立即onDataChange 被调用在返回之后,尽管在​​代码中“高于返回”。这就是异步代码的工作原理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 2017-02-05
相关资源
最近更新 更多