android - 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();
}
}
});
解决方案
与其将电子邮件用作用户详细信息的父节点,不如使用userId
:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId = user.getUid();
ref.child("users").child(userId).addListenerForSingleValueEvent(/* ... */);