如何更新Android中存在某些电子邮件的Firebase数据库?

时间:2017-07-06 05:23:26

标签: android firebase firebase-realtime-database

我搜索了文档和堆栈溢出问题,但无法找到我要找的答案。

我在数据库中注册了用户,并且我想更新存在相同电子邮件的孩子(如果用户选择更改他们的详细信息,即姓名和号码,那么应该更新详细信息,其中电子邮件是" { {1}}&#34)。

如果相同的电子邮件不存在,那么它应该创建一个新用户。但我的问题是它只更新了最新的user_email,并且没有在整个数据库中搜索该电子邮件。

Firebase Database Structure

这是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();
                            }
                        });
                          }

1 个答案:

答案 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/