Как я могу запросить данные из таблицы A при использовании учетных данных таблицы B?

Я разрабатываю мобильное приложение, которое может регистрировать посещаемость. Я разрабатываю его так, чтобы два разных приложения (для сотрудников и студентов) могли обращаться к одной и той же базе данных (база данных Google Firebase Realtime). Я назвал обоих за столом студентами и сотрудниками. Моя проблема в том, что когда я вхожу в систему как штатный сотрудник, я не могу запрашивать данные, которые хранятся как студент. Как мне это сделать?

Вот как я сохраняю данные о студентах.

    private void saveData() {
    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference myRef = firebaseDatabase.getReference("Student");

    UserProfile userProfile = new UserProfile(userName, userIDNum, userICNum, userEmail, userPhone, userCollegeName, userRoom, userFurniture);
    myRef.push().setValue(userProfile);}

так я сохраняю данные о персонале.

    private void saveData() {
    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference myRef = firebaseDatabase.getReference("Staff");

    UserProfile userProfile = new UserProfile(userName, userIDNum, userICNum, userEmail, userPhone, userCollegeName, userRoom, userFurniture);
    myRef.push().setValue(userProfile);
}

как выглядит моя база данных firebase

проблемы, которые у меня возникают

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.auth.FirebaseUser com.google.firebase.auth.FirebaseAuth.getCurrentUser()' on a null object reference
    at com.example.asus.courest.ViewStudentRecord.onCreate(ViewStudentRecord.java:39)

это мой код для извлечения данных кодирование для получения данных

«Вопросы, требующие помощи при отладке (« почему этот код не работает? ») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для их воспроизведения в самом вопросе. Вопросы без четкого описания проблемы бесполезны. другим читателям. См .: Как создать минимальный, полный и проверяемый пример. "

Frank van Puffelen 24.11.2018 05:48
4
1
48
2

Ответы 2

Создайте класс модели учащегося в приложении "Учителя", аналогичный классу модели учащегося в приложении "Учащиеся", получить ссылку на таблицу Student из firebase и получить доступ к данным с помощью Child

FirebaseDatabase.getInstance().getReference("Student")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        Student stud = snapshot.getValue(Student.class);
                        if (stud.getRoll().equals(roll)) {
                             //whatever you want
                        } else {
                            //show some error
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

Привет, Маве, я использовал предложенный вами пример, но произошла ошибка.

Muhammad Amirul Aizat Mohd Ros 26.11.2018 02:37

Неа. Вместо нулевой ошибки. он говорит, что я пытаюсь объявить "Student.class"

Muhammad Amirul Aizat Mohd Ros 26.11.2018 04:38

Вы не совсем правильно используете мой код? Вы должны изменить его в соответствии со своими потребностями

Mavee Shah 26.11.2018 04:38

Ага. Я не использую ваш код полностью. вместо Student я использую класс UserProfile для хранения данных.

Muhammad Amirul Aizat Mohd Ros 26.11.2018 04:58

У вас две таблицы. «Студент» и «персонал». При доступе к одному из них вы должны получить ссылку на db этого конкретного и получить данные (класс) в соответствующем классе. Я не знаю, как вы называете классы и все, кроме приведенного выше кода, я считаю

Mavee Shah 26.11.2018 05:01

я добавил свой код запроса в вопрос

Muhammad Amirul Aizat Mohd Ros 27.11.2018 08:03

   myRef.child("Events").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("event_Name") && (dataSnapshot.hasChild("startEvent") && (dataSnapshot.hasChild("eventOrganizer")))) ) {
                String event_name = dataSnapshot.child("event_Name").getValue().toString();
                Activity_Event_Name.setText(event_name);


                String startEvent = dataSnapshot.child("startEvent").getValue().toString();
                ActivityStartDateInput.setText(startEvent);

                String fullname = dataSnapshot.child("eventOrganizer").getValue().toString();
                ActivityCityInput.setText(fullname);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

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