Я программировал эту часть целую неделю и не мог найти решение.База данных Firebase выглядит следующим образом: Структура базы данных Firebase
FIREBASE -> Студенты (база данных) ->
{0}
|- ISIC: 1234567
|- name: "Vladimir"
|- password: "vlad"
|- indeks: "111/11"
|- meals
|-{0} - amount: 15
| name: breakfast
|-{1} - amount: 2
| name: lunch
{1}
|- ISIC: 98765
|- name: "John"
|- password: "doe"
|- indeks: 999/99
|- meals
|-{0} - amount: 18
| name: breakfast
|-{1} - amount: 20
| name: lunch
,...,
{n} (nodes)
|- (Data)
|- (Data)
Когда я нажимаюкнопка для входа в систему, где имя пользователя является Indeks и пароль введен, я хотел бы сначала запросить базу данных, чтобы найти студента, который имеет Indeks (по имени пользователя) и проверить , если пароль этогоstudent точно такой же, как в базе данных .
Мой код выглядит следующим образом:
EditText userName;
EditText pass;
Button logIn;
DatabaseReference dbStudents;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
userName = (EditText) findViewById(R.id.username);
pass = (EditText) findViewById(R.id.password);
logIn = (Button) findViewById(R.id.login);
dbStudents =
FirebaseDatabase.getInstance (). getReference ("Students");
logIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//some code which I don't know
}
});
}
Моя проблема в том, как получить весь объект Student из Firebase и использовать его после успешного входа в систему.Я использовал: Query, addListenerForSingleValueEvent and orderBy().getData()
, но не смог найти проблему с помощью ввода значения String и получения объекта Student.
СПАСИБО В СЛУЧАЕ!:)
ОБНОВЛЕНИЕ !!
public void getKey() {
dbStudents = FirebaseDatabase.getInstance().getReference("students");
dbStudents.orderByChild("indeks").equalTo(userName.getText().toString())
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
key = snapshot.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
С помощью этого я могу получить ключ узла (ученика), который содержит значение «Indeks» (вводится как имя пользователя),но теперь мне нужно получить извлечение как объект Student , используя ключ (String) из базы данных Firebase.Как я могу это сделать?
ОБНОВЛЕНИЕ 2 !!
Класс питания:
public class Meal {
private int amount;
private String name;
public Meal() {
}
public Meal(int amount, String name) {
this.amount = amount;
this.name = name;
}
public int getAmount() {
return amount;
}
public String getName() {
return name;
}
public void setAmount(int amount) {
this.amount = amount;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Meal{" +
"amount=" + amount +
", name='" + name + '\'' +
'}';
}
}
Класс ученика:
public class Student {
private int ISIC;
private String born;
private String contact;
private String description;
private String imagePath;
private String indeks;
private String issued;
private Meal[] meals;
private String name;
private String password;
private String studies;
private String validity;
public Student() {
}
public Student(int ISIC, String born, String contact, String description, String imagePath,
String indeks, String issued, Meal[] meals, String name, String password,
String studies, String validity) {
this.ISIC = ISIC;
this.born = born;
this.contact = contact;
this.description = description;
this.imagePath = imagePath;
this.indeks = indeks;
this.issued = issued;
this.meals = meals;
this.name = name;
this.password = password;
this.studies = studies;
this.validity = validity;
}
public int getISIC() {
return ISIC;
}
public String getBorn() {
return born;
}
public String getContact() {
return contact;
}
public String getDescription() {
return description;
}
public String getImagePath() {
return imagePath;
}
public String getIndeks() {
return indeks;
}
public String getIssued() {
return issued;
}
public Meal[] getMeals() {
return meals;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public String getStudies() {
return studies;
}
public String getValidity() {
return validity;
}
@Override
public String toString() {
return "Student{" +
"ISIC=" + ISIC +
", born='" + born + '\'' +
", contact='" + contact + '\'' +
", description='" + description + '\'' +
", imagePath='" + imagePath + '\'' +
", indeks='" + indeks + '\'' +
", issued='" + issued + '\'' +
", meals=" + meals +
", name='" + name + '\'' +
", password='" + password + '\'' +
", studies='" + studies + '\'' +
", validity='" + validity + '\'' +
'}';
}
public void setISIC(int ISIC) {
this.ISIC = ISIC;
}
public void setBorn(String born) {
this.born = born;
}
public void setContact(String contact) {
this.contact = contact;
}
public void setDescription(String description) {
this.description = description;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public void setIndeks(String indeks) {
this.indeks = indeks;
}
public void setIssued(String issued) {
this.issued = issued;
}
public void setMeals(Meal[] meals) {
this.meals = meals;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
public void setStudies(String studies) {
this.studies = studies;
}
public void setValidity(String validity) {
this.validity = validity;
}
}