Android - уровень доступа Firebase

Я новичок в разработке Android и все еще изучаю основы и пытаюсь получить другой доступ. У меня есть эта структура в моей базе данных. Я получаю значение статуса и использую в качестве типа пользователя.

Android - уровень доступа Firebase

и я получил эту ошибку

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);
     }
  }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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.

Я обычно предпочитаю ds.child("status").getValue(String.class), потому что он предотвращает непреднамеренное преобразование типов и не приводит к NPE, когда свойство status отсутствует в базе данных.

Frank van Puffelen 03.11.2018 23:37

Мне удалось войти в систему, но он игнорирует If и выполняет только оператор else

Gabriel Apostol 03.11.2018 23:38

Как так получилось, что значение статуса не получает «Менеджер проекта»?

Gabriel Apostol 03.11.2018 23:51

@GabrielApostol попробуйте addListenerForSingleValueEvent вместо addValueEventListener

Peter Haddad 03.11.2018 23:55

@PeterHaddad все то же самое :(

Gabriel Apostol 03.11.2018 23:58

@GabrielApostol у вас есть много ids с атрибутом под узлом User, поэтому он получает другой статус при зацикливании. Вам нужно получить значение идентификатора

Peter Haddad 04.11.2018 00:00

@PeterHaddad у меня уже есть идентификатор String current_user_id = mAuth.getCurrentUser().getUid();

Gabriel Apostol 04.11.2018 00:03

@GabrielApostol, затем добавьте сюда FirebaseReference ref=FirebaseDatabase.getInstance().getReference().child("Use‌​rs").child(current_u‌​ser_id); и удалите цикл for, String status = dataSnapshot.child("status").getValue().toString();

Peter Haddad 04.11.2018 00:04

Другие вопросы по теме