Проверьте, присутствует ли ребенок или нет, и извлеките простые данные из firebase

Проверьте, присутствует ли ребенок или нет, и извлеките простые данные из firebase

Это моя база данных firebase. Здесь в первом узле у меня есть дочерний элемент Был там, а во втором - нет. Я хочу проверить, существует ли этот Был там, и если не создать его, и если он существует, как получить его просто, без какой-либо модели или обратных вызовов? Это возможно?

Все API Firebase, которые получают данные из базы данных, включают обратные вызовы. Этого нельзя избежать.

Doug Stevenson 23.06.2018 21:28

Я пробовал использовать ValueEventListener, но он возвращает результат только в том случае, если данные добавляются или изменяются. Я хочу просто читать данные.

Bikram Nath 23.06.2018 21:51

Измените свой вопрос, чтобы показать код, который вы пробовали, и объяснить, почему он не соответствует вашим потребностям. Проблема, которую вы сейчас описываете, звучит совсем иначе, чем то, что вы написали в своем вопросе до сих пор.

Doug Stevenson 23.06.2018 21:54
0
3
444
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Примечание: вы не можете читать какие-либо данные без обратного звонка.

Теперь вы должны понять разницу между обратными вызовами в 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.......");

Я попробую это и сообщу! Спасибо за уделенное время и ответ :)

Bikram Nath 24.06.2018 15:37

Я понял. Если он есть, я могу проверить, есть ли BeenTherr, и, если нет, установить его в 0. Но как прочитать эти данные? dataSnapshot.child("BeenThere").getValue() Я попробовал и привел к ошибке.

Bikram Nath 24.06.2018 16:43

@BikramNath Я обновил код, чтобы вы могли получить значение (BeenThere). Редактирование находится под комментарием, который включает (ЭТО РЕДАКТИРОВАНИЕ **) в методе onDataChange ().

Hasan Bou Taam 24.06.2018 18:09

Какие вы замечательные люди! Это прекрасно работает. Я попробовал и преуспел, используя беспорядочный метод, получая данные в виде строки, а затем конвертируя их в int: D Спасибо, чувак :)

Bikram Nath 24.06.2018 18:33

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