Я настраиваю приложение регистрации / входа с помощью Firebase.В моей базе данных реального времени у меня есть два дочерних элемента: «Поставщик» и «Едок», которые находятся под родительским элементом «Клиенты».Когда пользователь регистрируется, он корректно сохраняет свою информацию на вкладке аутентификации Firebase, но когда я перехожу на вкладку базы данных реального времени, он не показывает идентификатор пользователя ни в одном из дочерних элементов.
Я уже пытался использовать DatabaseReference для сохранения идентификатора пользователя в правильном дочернем элементе, но, похоже, он не хранит идентификатор пользователя в базе данных, он только сохраняет пользователя для аутентификации.
public class VendorLoginActivity extends AppCompatActivity {
private EditText emailEditText;
private EditText passwordEditText;
private Button loginButton;
private Button registrationButton;
private FirebaseAuth firebaseAuth;
private FirebaseAuth.AuthStateListener fbAuthenticationListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vendor_login);
emailEditText = findViewById(R.id.email_edit_text);
passwordEditText = findViewById(R.id.password_edit_text);
loginButton = findViewById(R.id.login_button);
registrationButton = findViewById(R.id.registration_button);
firebaseAuth = FirebaseAuth.getInstance();
fbAuthenticationListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser fbUser = FirebaseAuth.getInstance().getCurrentUser();
if (fbUser != null ){
startActivity(new Intent(VendorLoginActivity.this, MainActivity.class));
finish();
return;
}
}
};
// Registration Button Clicked
registrationButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String emailUser = emailEditText.getText().toString();
final String passwordUser = passwordEditText.getText().toString();
firebaseAuth.createUserWithEmailAndPassword(emailUser, passwordUser).addOnCompleteListener(VendorLoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()){
Toast.makeText(VendorLoginActivity.this, R.string.registration_fail_toast, Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(VendorLoginActivity.this, R.string.registration_success_toast, Toast.LENGTH_SHORT).show();
String client_id = firebaseAuth.getCurrentUser().getUid();
DatabaseReference client_db = FirebaseDatabase.getInstance().getReference().child("Clients").child("Vendor").child(client_id);
client_db.setValue(true);
}
}
});
}
});
// Login Button Clicked
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String emailUser = emailEditText.getText().toString();
final String passwordUser = passwordEditText.getText().toString();
firebaseAuth.signInWithEmailAndPassword(emailUser, passwordUser).addOnCompleteListener(VendorLoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()){
Toast.makeText(VendorLoginActivity.this, R.string.login_failed_toast, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(VendorLoginActivity.this, R.string.login_success_toast, Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
@Override
protected void onStart() {
super.onStart();
firebaseAuth.addAuthStateListener(fbAuthenticationListener);
}
@Override
protected void onStop() {
super.onStop();
firebaseAuth.removeAuthStateListener(fbAuthenticationListener);
}
}
Я ожидаю, что userId будет отображаться в дочерней базе данных Firebase Realtime «Vendor» или «Eater» (в зависимости от того, какую кнопку пользователь впервые нажал на экране приветствия), но вместо этого база данных Firebase Realtime непоказать любой userId в любом из дочерних элементов "Vendor" или "Eater."