首页 > 解决方案 > Firebase 数据库路径不得包含“.”、“#”、“$”、“[”或“]”

问题描述

您好,我遇到了这个错误,我正在尝试捕获并写下用户的节点>电子邮件,但仍然出错,有人可以帮我吗?欢迎任何帮助。节点电子邮件已经有逗号,但是在恢复时,我仍然收到错误消息,我正在尝试修改节点时收到下面的代码。

我的代码

 addButton.setOnClickListener(new View.OnClickListener() {
        DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
        @Override
        public void onClick(View v) {
            final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            final String userUid = user.getEmail();

            final DatabaseReference ref = FirebaseDatabase.getInstance().getReference();

            ref.child("users").child(user.getEmail().replace(".",",")).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {


                        Map<String,Object> map = new HashMap<>();
                        map.put("cassinotime",dataSnapshot.child("cassinotime").getValue(String.class));
                        map.put("cassinoprofit",dataSnapshot.child("cassinoprofit").getValue(String.class));


                        ref.child("users").child(user.getEmail()).child("cassino").child("cassinotime").setValue(map);
                        ref.child("users").child(user.getEmail()).child("cassino").child("cassinotime").setValue("50000");
                        ref.child("users").child(user.getEmail()).child("cassino").child("cassinoprofit").setValue("250");


                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }

注册码

private void firebaseAuthWithGoogle(final GoogleSignInAccount account) {
        AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {

                            User user = new User(


                            );
                            String photoUrl = null;
                            if (account.getPhotoUrl() != null) {
                                user.setPhotoUrl(account.getPhotoUrl().toString());
                            }

                            user.setEmail(account.getEmail());
                            user.setUser(account.getDisplayName());
                            user.setUid(mAuth.getCurrentUser().getUid());
                            user.setMoney(money);
                            user.setCassinotime(cassinotime);
                            user.setCassinoprofit(cassinoprofit);

                            FirebaseUtils.getUserRef(account.getEmail().replace(".", ","))
                                    .setValue(user, new DatabaseReference.CompletionListener() {
                                        @Override
                                        public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                                            mFirebaseUser = mAuth.getCurrentUser();
                                            finish();
                                        }
                                    });
                        } else {
                            dismissProgressDialog();
                        }
                    }
                });

标签: androidfirebasefirebase-realtime-database

解决方案


与其将电子邮件用作用户详细信息的父节点,不如使用userId

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId = user.getUid();
ref.child("users").child(userId).addListenerForSingleValueEvent(/* ... */);

推荐阅读