2017-10-17 49 views
5

Przechodzenie przez kod Lab Firebase Android pogawędkę - w https://codelabs.developers.google.com/codelabs/firebase-android/ - używam do problemu gdzie żaden z wywołania zwrotne są osiągnięty/wezwał do Krok 7: Czytaj Wiadomościoddzwaniania do FirebaseRecyclerAdapter nie działa

przechodzi/projektu android-start, jestem w stanie przejść przez pierwsze kroki 2-6:

  1. Przegląd
  2. Pobierz przykładowy kod
  3. importu t on rozrusznik aplikacja
  4. Tworzenie Firebase konsoli projekt
  5. Run rozrusznik aplikacja
  6. włączyć uwierzytelnianie (android app dodaje nazwą pakietu i SHA1 poprzez konsolę projektu, etc)

Jednak kiedy idę wykonać krok 7 - żaden z wywołań zwrotnych nie zostanie wywołany. Uruchamiam aplikację i działają kroki logowania/wylogowywania.

mam importowane initial_messages.json zgodnie z instrukcjami tam i skopiowane kodu dokładnie do kroku 7 (kilka prób w celu upewnienia się, że nie może przegapić coś po drodze) .. a następnie próbował nawet w gotowy/androidowy projekt. Istnieje również ten sam problem, w którym callbacks nigdy nie są uruchamiane, więc spinner po prostu wisi.

Ponieważ jest tak dużo kodu, opublikuję sekcje, w których oczekuję uruchomienia wywołania zwrotnego. Czy ktoś może doradzić, czego tu brakuje? I nie ma problemu - jeśli to pomoże dodać więcej kodu, który mam. Dzięki za czytanie

// mProgressBar.setVisibility(ProgressBar.INVISIBLE); 
    // New child entries 
    mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(); 

    SnapshotParser<FriendlyMessage> parser = new SnapshotParser<FriendlyMessage>() { 
     @Override 
     public FriendlyMessage parseSnapshot(DataSnapshot dataSnapshot) { 
      ... 
     } 
    }; 
    ... 

    DatabaseReference messagesRef = mFirebaseDatabaseReference.child(MESSAGES_CHILD); 

    ... 

    FirebaseRecyclerOptions<FriendlyMessage> options = 
      new FirebaseRecyclerOptions.Builder<FriendlyMessage>() 
        .setQuery(messagesRef, parser) 
        .build(); 

    mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder>(options) { 
     @Override 
     public MessageViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
      ... 
     } 

     @Override 
     protected void onBindViewHolder(final MessageViewHolder viewHolder, 
             int position, 
             FriendlyMessage friendlyMessage) { 
      .... 

     } 
    }; 

    mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 
     @Override 
     public void onItemRangeInserted(int positionStart, int itemCount) { 
      ... 
     } 
    }); 


    mMessageRecyclerView.setAdapter(mFirebaseAdapter); 

Odpowiedz

2

W wersji 3.0 FirebaseUI nowy lifecycle policy for FirebaseRecyclerAdapter został wprowadzony. W związku z tym wymagane jest jawne wywołanie na adapterze startListening() & stopListening() w celu nakazania zatrzymania pobierania danych z bazy danych przez &.

Z FirebaseUI 3.0 upgrade guide:

Lifecycle Adapter - w poprzednich wersjach adaptery zaczął słuchać natychmiast momencie konkretyzacji i miał cleanup() połączenia przestanie słuchania. W wersji 3.x musisz jawnie wywołać startListening() i stopListening() lub przekazać LifecycleOwner do kreatora opcji.

To jest najnowsza wersja i wygląda na to, że Code Lab nie został jeszcze zaktualizowany, aby odzwierciedlić tę przełomową zmianę. Podniosłem to jako an issue on the firebase/friendlychat-android GitHub repo.

+1

Nie wiedziałem, że powinienem sprawdzać z jakimkolwiek przewodnikiem aktualizacji .. dobry wskaźnik tam, ponieważ nie widziałem tego w Kodzie Kodowym .. hmm? Cały ten kod Code Lab ... inaczej solidne ... po prostu 1 brakująca linia 'mFirebaseAdapter.startListening();' i nic z tego nie działa. Nie byłem pewien, czy powinienem to opublikować, sądząc, że przegapiłem coś oczywistego. Wiem, że powinniśmy unikać komentarzy z podziękowaniami - ale w tym przypadku naprawdę zrozumiałeś ważny problem; jak przypuszczam, wielu ludzi używa tych Code Labs ..zaoszczędziłem mój dzień na pewno (dziękuję) – gnB

+1

Cieszę się, że mogę pomóc! Wiem, co masz na myśli, to mnie zaskoczyło na początku tego tygodnia i nie mogłem uwierzyć, że to było lekarstwo! Jest to szczególnie dziwne, ponieważ nie pamiętam, że laboratorium kodu nawet wspomniało, że używa FirebaseUI. Podobnie, oni ostatnio [zaktualizowali zależności przykładowego kodu] (https://github.com/firebase/friendlychat-android/commit/a88cd214e5528e17fd3c234d83589d85872650e2), ale nie dodali tego bardzo ważnego wywołania metody! Wydaje mi się, że tak właśnie dzieje się, gdy biblioteki wprowadzają zmiany łamania. – Grimthorr