Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase-检查数据是否存在并添加它们_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android Firebase-检查数据是否存在并添加它们

Android Firebase-检查数据是否存在并添加它们,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想检查用户是否是一个特定团队的成员,如果用户不是,他将被要求加入,如果他是,他将被定向到一个页面。我确实发现了一些类似的问题,但不知何故,我仍然无法将用户添加到数据库中。下面是我的代码,每当我点击其中一个列表时,这个代码就会崩溃 databaseMembers = FirebaseDatabase.getInstance().getReference("members"); listViewTeams.setOnItemClickListener(new AdapterView.OnItem

我想检查用户是否是一个特定团队的成员,如果用户不是,他将被要求加入,如果他是,他将被定向到一个页面。我确实发现了一些类似的问题,但不知何故,我仍然无法将用户添加到数据库中。下面是我的代码,每当我点击其中一个列表时,这个代码就会崩溃

databaseMembers = FirebaseDatabase.getInstance().getReference("members");

listViewTeams.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            //getting the selected team
            Team team = teams.get(i);
            checkMember();


            //creating an intent
            Intent intent = new Intent(getApplicationContext(), ChatRoomActivity.class);

            //putting team name and id to intent
            intent.putExtra(TEAM_ID, team.getTeamId());
            intent.putExtra(TEAM_NAME, team.getTeamName());

            //starting the activity with intent
            startActivity(intent);
        }
    });

private void checkMember(){
    FirebaseUser user = firebaseAuth.getCurrentUser();
    final String teamMember = user.getEmail();
    databaseMembers.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.hasChild(teamMember)){
                finish();
            }
            else{
                databaseMembers.push().setValue(teamMember);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
我的数据库:


当用户点击“恒”团队时,它将检查数据库中是否存在用户的电子邮件,如果不存在,则将用户的电子邮件添加为团队成员。我可以添加创建团队的用户,但似乎无法添加希望稍后加入的用户。如果有人能帮助我,我真的很感激。如果缺少信息,请告诉我。

问题是Firebase不接受密钥中的
(点)符号。所以为了使用电子邮件地址,你需要有一个编码方法。电子邮件地址必须是
name@mail,com
(请参见
逗号)代替nume@email.com就像你的情况一样。这些是对电子邮件地址进行编码和解码的方法

static String encodeUserEmail(String userEmail) {
    return userEmail.replace(".", ",");
}
static String decodeUserEmail(String userEmail) {
    return userEmail.replace(",", ".");
}

此方法将解决您的问题。

您的日志中清楚地提到了您的问题:

Firebase数据库路径不得包含“.”、“#.”、“$”、“[”或“]”

我想它甚至不接受“@”。将用户添加到数据库中的正确方法是使用用户uid

例如:

在代码中,可以执行以下操作:

private void checkMember(){
    FirebaseUser user = firebaseAuth.getCurrentUser();
    final String teamMember = user.getUid();
    databaseMembers.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.hasChild(teamMember)){
                finish();
            }
            else{
                databaseMembers.push().setValue(teamMember);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

你的问题写在你的日志上:

Firebase数据库路径不得包含“.”、“#.”、“$”、“[”或“]”

但我也检查了你的代码。您可以这样编写firebase查询

databaseMembers = FirebaseDatabase.getInstance().getReference("members");
Query q = databaseMembers.orderbyChild("heng").equalTo(user.getEmail());

你可以写动态的,我只是举个例子。

我应该把这些方法放在哪里?代码中的任何地方?很抱歉,我不知道如何使用编码/解码方法。您介意向我解释一下我应该如何使用这些代码吗?在您需要它们的活动中或在助手类中。仍然一样,我会将您的代码放在我的checkMember函数之后。如果您遇到同样的错误,这意味着您插入了未编码的电子邮件地址,包含不允许的
。因此,为了以正确的格式添加电子邮件,您需要执行以下操作:
String encodedEmailAddress=encodeUserEmail(userEmail)
其中
userEmail
是您现在使用的电子邮件,
encodemailaddress
是您需要插入数据库的电子邮件。
private void checkMember(){
    FirebaseUser user = firebaseAuth.getCurrentUser();
    final String teamMember = user.getUid();
    databaseMembers.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.hasChild(teamMember)){
                finish();
            }
            else{
                databaseMembers.push().setValue(teamMember);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
databaseMembers = FirebaseDatabase.getInstance().getReference("members");
Query q = databaseMembers.orderbyChild("heng").equalTo(user.getEmail());