Singleton в этом случае не работает, во-первых, для извлечения данных с использованием класса модели в firebase вам нужен открытый конструктор, а не private.Во-вторых, шаблон синглтона используется, если вам нужен один объект этого класса, если вы собираетесь извлекать данные из базы данных, вы собираетесь создавать более одного объекта, поскольку у вас есть несколько пользователей.Проверьте это:
https://www.geeksforgeeks.org/singleton-class-java/
Предполагая, что вы изменили синглтон, затем примените следующее к вашему коду:
Затем сначала измените конструктор, чтобы он стал public Users(){}
(то есть, если вы изменили имя класса на Users
).
Затем, чтобы извлечь данные из базы данных, сначала измените структуру базы данных следующим образом:
Users
userId
mEmail : ...
mEventDate: ...
mEventLocation : ....
mPartnerName : ...
mUserName : ....
Таким образом, в вашей структуре базы данных удалите узел UserDetails
, потому что он немного бесполезен, поскольку вы можете использовать userId
для идентификации этого пользователя.Также не используйте password
в базе данных, она уже зашифрована при аутентификации в firebase.Если вы хотите добавить его в базу данных, то перед добавлением зашифруйте его.
Затем измените код на следующий:
users = db.getReference("Users");
public void loadUserDetailsData() {
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Users retrievedData = dataSnapshot.getValue(Users.class);
String email = retrievedData.getmEmail();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
users.addListenerForSingleValueEvent(eventListener);
}