База данных Firebase Realtime: идентификатор пользователя не отображается внутри дочернего элемента - PullRequest
0 голосов
/ 01 февраля 2019

Я настраиваю приложение регистрации / входа с помощью 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."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...