Я новичок в разработке Android и все еще изучаю основы и пытаюсь получить другой доступ. У меня есть эта структура в моей базе данных. Я получаю значение статуса и использую в качестве типа пользователя.
и я получил эту ошибку
java.lang.String java.lang.Object.toString()' on a null object reference
at com.example.gab.quadrantms.LoginActivity$1$1$1.onDataChange(LoginActivity.java:116)
Авторизоваться
private DatabaseReference mUserType;
mUserType = FirebaseDatabase.getInstance().getReference().child("Users").child("status");
mUserType.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// THIS IS WHERE THE ERROR IS POINTING
String status = dataSnapshot.child("status").getValue().toString();
if (status.equals("Project Manager"))
{
Intent intent = new Intent(LoginActivity.this, Home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
else
{
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}




FirebaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users").child(current_user_id);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String status = dataSnapshot.child("status").getValue().toString();
if (status.equals("Project Manager"))
{
Intent intent = new Intent(LoginActivity.this, Home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
else
{
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}
Сначала вам нужно создать ссылку на узел Users, затем, поскольку вам нужен доступ к дочернему status, и поскольку у вас есть случайный идентификатор под узлом Users. Вы должны выполнить цикл внутри прямых потомков dataSnapshot (в данном случае это узел Users), и вы сможете получить значение status.
Мне удалось войти в систему, но он игнорирует If и выполняет только оператор else
Как так получилось, что значение статуса не получает «Менеджер проекта»?
@GabrielApostol попробуйте addListenerForSingleValueEvent вместо addValueEventListener
@PeterHaddad все то же самое :(
@GabrielApostol у вас есть много ids с атрибутом под узлом User, поэтому он получает другой статус при зацикливании. Вам нужно получить значение идентификатора
@PeterHaddad у меня уже есть идентификатор String current_user_id = mAuth.getCurrentUser().getUid();
@GabrielApostol, затем добавьте сюда FirebaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users").child(current_user_id); и удалите цикл for, String status = dataSnapshot.child("status").getValue().toString();
Я обычно предпочитаю
ds.child("status").getValue(String.class), потому что он предотвращает непреднамеренное преобразование типов и не приводит к NPE, когда свойствоstatusотсутствует в базе данных.