2016-06-03 6 views
0

Я пытаюсь установить событие однозначного прослушивателя, и он работает обычно. (Выполнение этого с помощью pull to refresh - оно работает, даже если я убью приложение и снова открою его, или система андроида восстановит память в фоновом режиме).Firebase, иногда не вызывающая база данных

Однако, возможно, через определенный промежуток времени (пару часов) я возвращаюсь в приложение и пытаюсь получить к нему доступ, а приведенный ниже код больше не срабатывает. И он остается в этом неоперабельном состоянии (однако я проверяю, что все есть). Это продолжается до тех пор, пока я в основном не выхожу из системы и не заходим в систему.

Я поместил журнал в метод onDataChange и не запускается. Я вытащил его за него, и он выстрелил.

Вот мой код:

  FirebaseDatabase.getInstance() 
       .getReference() 
       .child(context.getString(R.string.firebase_jobs)) 
       .child(userId). 
       addListenerForSingleValueEvent(
         new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 
           for (DataSnapshot jobSnapShot : dataSnapshot.getChildren()) { 
            JobItem jobItem = jobSnapShot.getValue(JobItem.class); 
            // Add the ID into the jobItem 
            jobItem.setId(dataSnapshot.getKey()); 

            // Set the jobItem 
            arrayList.add(jobItem); 
            subscriber.onNext(jobItem); 
           } 
          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 
           Log.e(TAG, "onCancelled: " + databaseError.getMessage()); 
          } 
         }); 
    } 

ли кто-нибудь испытал код, где он иногда не может вызвать в коде? Благодаря!

Edit: я пытаюсь выйти в то время как его обжиг, и я получаю сообщение об ошибке журнала:

E/FirebaseRetrieveData: onCancelled: Permission denied 

Так дело стреляет, он просто занимает много времени, чтобы получить данные обратно ... если это когда-либо!

ответ

1

Это предполагаемое поведение addListenerForSingleValueEvent(). Как описано в документах:

Он запускается один раз, а затем не запускается снова.

Если вы не нацелены на что-то другое? Я что-то не понял в вашем посте? Вы ориентируетесь только на то, чтобы выслушали конкретную ценность? Если да, я думаю, вы должны были использовать addValueEventListener().

EDIT:

Только в случае, если другие видят это. Вот последняя ссылка для docs для addListenerForSingleValueEvent().

+0

Mhmm ... извините - я имел в виду, что он срабатывает один раз, все в порядке. Я делаю попытку для обновления, и это срабатывает нормально. Убейте приложение, оставьте его в фоновом режиме, и система восстановит память (убив ее), и перезапуск ее все еще работает. ОДНАКО Я оставляю свой телефон и возвращаюсь на пару часов позже, и он, похоже, больше не может запускать, и становится шалостями в неработоспособном состоянии. Это проблема. – lawonga

+1

Да. Это предполагаемое поведение для 'addListenerForSingleValueEvent()'. Он запускается только один раз, а затем больше нет. Если вы хотите прослушивать каждое событие на определенной ссылке/child, вы должны использовать 'addValueEventListener()' вместо этого. –

+0

Ах хорошо ... имеет смысл. Firebase docs, похоже, временами вводят в заблуждение (мне все равно). Спасибо, попробуй! – lawonga

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