SingleValueEvent Отображается значение null

Query sqlite = mDatabaseReference.child("Messages").child(MessageSenderId).child(MessageRecieverId);
sqlite.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.hasChild("Message")) {
                    String msg = dataSnapshot.child("Message").getValue().toString();
                    String from = dataSnapshot.child("From").getValue().toString();
                    String time = dataSnapshot.child("Time").getValue().toString();

                } else {
                    Toast.makeText(getApplicationContext(), "NULLLL", Toast.LENGTH_SHORT).show();
                }

База данных

SingleValueEvent Отображается значение null

Это самая основная вещь в базе данных. У меня никогда не было проблем с childEvent или valueEvent, и сейчас мне нужно одно событие, и я не могу его получить.

Ошибки нет, потому что я поставил оператор if, и он показывает тост как нулевой, что означает, что у dataSnapshot нет дочернего объекта с именем messages, но он прямо здесь. Я тоже пробовал поставить цикл for, но не сработало

Вам не хватает возможности добавить child(UID) как смотрящий из вашей базы данных, попробуйте один раз.

Jeel Vankhede 15.12.2018 07:42

Но это push ID @JeelVankhede

user10782033 15.12.2018 07:43

Согласно вашему запросу к базе данных, для вашего UID не добавлен дочерний элемент, поэтому база данных будет напрямую ссылаться на дочерний элемент UID, и именно поэтому ваше сообщение является нулевым.

Jeel Vankhede 15.12.2018 07:46

Но я ведь не знаю UID? так как я могу его получить. Обычно база данных просто проходит через это, но почему этого не происходит сейчас @JeelVankhede

user10782033 15.12.2018 07:47

Если вы попытаетесь жестко закодировать эти идентификаторы (MessageSenderId и MessageRecieverId), получите ли вы ожидаемый результат?

Alex Mamo 15.12.2018 09:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
5
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы не указали полную ссылку. Есть список нажимаемых клавиш, и вы должны использовать цикл foreach.

Query sqlite = mDatabaseReference.child("Messages").child(MessageSenderId).child(MessageRecieverId);
sqlite.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

for (DataSnapshot vinSnapshot : dataSnapshot.getChildren()) {
                    if (vinSnapshot .hasChild("Message")) {
                    String msg = dataSnapshot.child("Message").getValue().toString();
                    String from = dataSnapshot.child("From").getValue().toString();
                    String time = dataSnapshot.child("Time").getValue().toString();

                } else {
                    Toast.makeText(getApplicationContext(), "NULLLL", Toast.LENGTH_SHORT).show();
                }
                }

Или вы можете сохранить все данные в ArrayList, а затем выполнить свою задачу.

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