# #java #android #firebase #firebase-realtime-database
Вопрос:
У меня возникли проблемы с возможностью печати значений в моментальном снимке, но конкретизация с помощью get values возвращает значение null.
Я пытаюсь получить список, загруженный в Firebase, и сравнить его со списком, который передаст пользователь.
rootReference.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { for (DataSnapshot item_child : snapshot.getChildren()) { String recId = item_child.getKey(); DatabaseReference rootReference = FirebaseDatabase.getInstance("https://what-s-cookin-a3bec-default-rtdb.asia-southeast1.firebasedatabase.app/") .getReference().child("Recipes").child(recId); Log.d(TAG, "RECID: " recId); rootReference.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { for (DataSnapshot ds : snapshot.getChildren()) { Log.d(TAG, "SNAPSHOT: " ds); Log.d(TAG, "SPECIFIC: " ds.child("ingredients")); if(ds.child("ingredients").getValue() != null) { Log.d(TAG, "INGREDIENTS NOT NULL"); ArrayListlt;Stringgt; ing = new ArrayListlt;Stringgt;(); for (DataSnapshot ings : snapshot.child("ingredients").getChildren()) { ing.add(ings.getValue(String.class)); Log.d(TAG, "DS: " ds); Log.d(TAG, "INGS: " ings); }
Это результат работы logcat:
SNAPSHOT: DataSnapshot { key = ingredients, value = {0=Fish, 1=bitter, 2=cilantro} } SPECIFIC: DataSnapshot { key = ingredients, value = null }
Это наша база огня: Скриншот базы огня
Рецепты 1634971267099 Количество фаворитов: 8 идентификатор: «1634971267099» Изображение: «https://firebasestorage.googleapis.com/v0/b/wha…» ингредиенты 0: «Рыба» 1: «горький» 2: «Кинза» Основное блюдо: «Свинина» мера: «тест» название: «Почеро» продукт: «тест» подача: «15» время: «30» uid: «tMdUFcAelyeVo5DYW3P7HolRW4S2»
Комментарии:
1. Ваша вторая
for
петля закончиласьsnapshot.child("ingredients").getChildren()
, но так и должно бытьds.child("ingredients").getChildren()
. Я настоятельно рекомендую использовать значимые имена переменных, чтобы предотвратить такие ошибки.2. Спасибо, но проблема была не в этом. Я изменил переменные на то, что вы предложили, но это все равно создает ту же проблему. Когда я использую getChildren(), он выводит все, что есть в базе данных, но когда я называю ее конкретно дочерней. («ингредиенты»).GetValue(), возвращает значение null
3. Это определенно была одна из проблем в вашем коде. Вы сначала проверяете
if(ds.child("ingredients").getValue()
, а затем выполняете циклfor (DataSnapshot ings : snapshot.child("ingredients").getChildren())
, поэтому в одном из них вы используетеingredients
дочерний элемент неправильного снимка. Если вы исправили это и все еще сталкиваетесь с той же проблемой, отредактируйте свой вопрос, чтобы показать обновленный код.
Ответ №1:
Проверьте, соответствует ли ваш код данным Firebase. Было бы более понятно, если бы вы опубликовали скриншот данных Firebase, чтобы понять иерархию базы данных.
Трудно понять структуру базы данных из вашего кода.
Комментарии:
1. Я отредактировал вопрос и добавил иерархию firebase. Извини за это