Я разрабатываю мобильное приложение, которое может регистрировать посещаемость. Я разрабатываю его так, чтобы два разных приложения (для сотрудников и студентов) могли обращаться к одной и той же базе данных (база данных 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)
это мой код для извлечения данных кодирование для получения данных
Создайте класс модели учащегося в приложении "Учителя", аналогичный классу модели учащегося в приложении "Учащиеся", получить ссылку на таблицу 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) {
}
});
Привет, Маве, я использовал предложенный вами пример, но произошла ошибка.
Неа. Вместо нулевой ошибки. он говорит, что я пытаюсь объявить "Student.class"
Вы не совсем правильно используете мой код? Вы должны изменить его в соответствии со своими потребностями
Ага. Я не использую ваш код полностью. вместо Student я использую класс UserProfile для хранения данных.
У вас две таблицы. «Студент» и «персонал». При доступе к одному из них вы должны получить ссылку на db этого конкретного и получить данные (класс) в соответствующем классе. Я не знаю, как вы называете классы и все, кроме приведенного выше кода, я считаю
я добавил свой код запроса в вопрос
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) {
}
});
«Вопросы, требующие помощи при отладке (« почему этот код не работает? ») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для их воспроизведения в самом вопросе. Вопросы без четкого описания проблемы бесполезны. другим читателям. См .: Как создать минимальный, полный и проверяемый пример. "