我搜索了文档和堆栈溢出问题,但无法找到我要找的答案。
我在数据库中注册了用户,并且我想更新存在相同电子邮件的孩子(如果用户选择更改他们的详细信息,即姓名和号码,那么应该更新详细信息,其中电子邮件是" { {1}}&#34)。
如果相同的电子邮件不存在,那么它应该创建一个新用户。但我的问题是它只更新了最新的user_email
,并且没有在整个数据库中搜索该电子邮件。
这是RegisterActivity,其中调用userid
并调用UpdateUser()
:
CreateNewUser()
存在方法的用户活动:
final String newnum = mob.getText().toString().trim();
final String n = Name.getText().toString().trim();
final String p = pass.getText().toString().trim();
if (Name.getText().toString().equals("") ||
pass.getText().toString().equals("") ||
email.getText().toString().equals("") ||
mob.getText().toString().equals("")) {
Toast.makeText(getApplicationContext(), "Please fill in all
the fields!", Toast.LENGTH_SHORT).show();
} else if (mob.getText().toString().length() < 10 || mob.getText().toString().length() > 10) {
mob.setError("Invalid Phone Number");
}
else {
mAuth.createUserWithEmailAndPassword(e, p)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
final String u_id = userc.getUsername();
if (!task.isSuccessful()) {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("users").child(u_id).child("Email").
addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Toast.makeText
(getApplicationContext(), "Username already exists. Please try again!
Or change your details if you wish", Toast.LENGTH_SHORT).show();
userc.updateUser(u_id, n, e, newnum);
finish();
}
}
@Override public void onCancelled(DatabaseError databaseError)
{
}
});
}
final String userid = mAuth.getCurrentUser().getUid();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("email", e);
editor.putString("phoneno", newnum);
editor.putString("Name",n);
editor.putString ("Password", p);
editor.commit();
userc.writeNewUser(userid, n, e, newnum);
finish();
}
});
}
答案 0 :(得分:1)
试试这种方式,这正是你要找的东西
private void updateUser(String name, String email) {
// updating the user via child nodes
if (!TextUtils.isEmpty(name))
mFirebaseDatabase.child(userId).child("name").setValue(name);
if (!TextUtils.isEmpty(email))
mFirebaseDatabase.child(userId).child("email").setValue(email);
}
http://www.androidhive.info/2016/10/android-working-with-firebase-realtime-database/