Примечание: вы не можете прочитать никакие данные без обратного вызова.
Теперь вы должны понимать разницу между обратными вызовами в firebase, есть 3 (и всеэти 3 считаются считывателями данных):
Добавленный дочерний элемент:
Пуски при добавлении дочернего элемента.(Это не то, что вам нужно).
Значение Прослушиватель событий:
Пуски при добавлении или изменении дочернего элемента.(Это не то, что вам нужно).
Прослушиватель события с одним значением:
Запускается только после его подключения и не запускается снова (Это то, что вам нужно)).
Итак, как вы теперь видите, когда вам нужно просто прочитать данные, вы должны позвонить Listener for single value event
.
Пример:
Допустим, вы хотите проверить, существует ли BeenThere
под определенным случайным идентификатором, вы должны сделать это:
//this is a method that you call when you need to read the node and do the check.
public void checkBeenThere(String random_id){
DatabaseReference places_ref = FirebaseDatabase.getInstance().getReference().child("Places");
places_ref.child(random_id).addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot datasnapshot){
//check if Been there exist
if(datasnapshot.hasChild("BeenThere")){
//been there is found
//get the value of been there (THIS IS THE EDIT***).
int been_there = datasnapshot.child("BeenThere").getValue(Integer.class);
}else{
//been there is not found
//add it under the specific random id
places_ref.child(random_id).child("BeenThere").setValue(0);
}
}
@Override
public void onCnacelled(DatabaseError error){
}
});
}
Если вы не уверены в значении random_id, это просто тот идентификатор, который у вас есть в структуре базы данных.(например: ChIJZZ .........), вам нужно передать этот идентификатор, чтобы проверить, были ли там под ним.
Итак, допустим, я хочу проверить, существовал ли он под ChIJZZ.........., я делаю это:
//you must type the whole id, I added .... because it is long.
checkBeenThere("ChIJZZ_sM.......");