2016-12-29 5 views
1

У меня есть этот стандартный Firebase вызов:Firebase ValueEventListener вернуть не существующий ключ

ref.child("user/toys/-K2873267832") 
    .addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot != null) { 
      // wow the Data at Firebase database does not exist 
     } 
    } 
} 

Проблема заключается в том, что ссылка "user/toys/-K2873267832" не существует. Когда я удаляю ключ на странице console.firebase.google.com, dataSnapshot не должен иметь правильные данные. Даже ключ user/toys удален.

Я работаю над этим проектом в течение месяца и имею много ValueEventListener в сложной базе данных. Этого я никогда раньше не видел.

Что может привести к этому?

+0

Значит, dataSnapshot не равен нулю? – Lyla

+0

точно, DataSnapshot {key = -K2873267832, value = null} –

+0

См. Ответ отправленный; вы получаете значение для этого местоположения, но это ожидается. Также ожидается, что он не будет иметь ценности. Если вы пытаетесь проверить наличие в местоположении, вот как вы это сделаете - используйте прослушиватель событий значения, а затем посмотрите, являются ли данные нулевыми. Вы также можете выполнить вызов родительского узла и использовать метод 'hasChild', чтобы узнать, существует ли он, как описано [здесь] (http://stackoverflow.com/questions/37397205/google-firebase-check-if- дети существует). – Lyla

ответ

2

По this post:

ValueEventListener будет вызвана с пустым значением, если значение не существует на месте. Поэтому, если вы также вызываете addListenerForSingleValueEvent(), вы можете обнаружить, что в этом месте нет значения.

то он говорит, что dataSnapshot.getValue() должен равняться null. Поэтому, пока верный DataSnapshot будет возвращен, значение в этом снимке будет равно нулю.

+0

Итак, никогда не бывает ситуации, когда dataSnapshot имеет значение NULL? –

+0

спасибо, я понимаю сейчас –

Смежные вопросы