2017-10-17 4 views
5

En passant par le Code Lab pour Firebase Android bienvenus chat - à https://codelabs.developers.google.com/codelabs/firebase-android/ - Je suis en cours d'exécution dans un problème où aucun des callbacks sont atteints/a appelé à l'étape 7: lire les messagesCallbacks pour FirebaseRecyclerAdapter ne fonctionne pas

en passant par le/projet android-départ, je suis en mesure de passer à travers les premières étapes: 2-6

  1. Aperçu
  2. obtenir le code échantillon
  3. importation t il démarreur application
  4. Créer Firebase console projet
  5. Lancez l'application de démarrage
  6. Activer l'authentification (app Android ajouté avec le nom du package et SHA1 via la console de projet, etc.)

Cependant, quand je vais pour faire l'étape 7 - aucun des callbacks là n'est appelé. Je cours l'application et les étapes d'entrée/sortie fonctionnent.

J'ai importé initial_messages.json comme indiqué là-bas et copié sur le code exactement pour l'étape 7 (plusieurs tentatives dans un effort pour faire en sorte peut-être que je ne l'ai pas raté quelque chose le long du chemin) .. et même essayé dans la fini/projet android. Là aussi, le même problème où les callbacks ne sont jamais exécutés et donc le spinner se bloque juste là.

Puisqu'il y a tellement de code, je posterai les sections où je m'attends à ce que le rappel fonctionne. Quelqu'un peut-il s'il vous plaît conseiller sur ce que je pourrais manquer ici? Et pas de problème - si cela vous aidera à ajouter plus de code que j'ai. Merci d'avoir lu

// 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); 

Répondre

2

Dans la version 3.0 de FirebaseUI, une nouvelle lifecycle policy for FirebaseRecyclerAdapter a été introduit. Par conséquent, vous devez maintenant appeler explicitement startListening() & stopListening() sur l'adaptateur pour lui demander de démarrer & arrêter de récupérer des données de la base de données.

De l'FirebaseUI 3.0 upgrade guide:

Cycle de vie Adapter - dans les versions précédentes, les adaptateurs ont commencé à écouter immédiatement après instanciation et avait un appel cleanup() d'arrêter écoute. Dans 3.x, vous devez appeler explicitement startListening() et stopListening() ou transmettre un LifecycleOwner au générateur d'options.

Ceci est une version très récente et il semble que le Code Lab n'a pas encore été mis à jour pour refléter ce changement de rupture. J'ai soulevé ceci comme an issue on the firebase/friendlychat-android GitHub repo.

+1

Je ne savais pas que je devrais vérifier avec un guide de mise à niveau .. bon pointeur là, comme je ne l'ai pas vu mentionné dans le Code Lab .. hmm? Tout ce code Code Lab .. autrement solide .. simplement cette 1 ligne manquante 'mFirebaseAdapter.startListening();' et tout cela ne fonctionnait pas. Je n'étais pas sûr si je devrais même poster ceci, pensant que j'ai dû manquer quelque chose d'évident. Je sais que nous sommes censés éviter les commentaires de remerciements - mais dans ce cas, vous avez vraiment saisi un problème important, je pense; comme je devine que beaucoup de gens utilisent ces Code Labs ..sauvé ma journée à coup sûr (merci) – gnB

+1

Content de pouvoir aider! Je sais ce que tu veux dire, il m'a attrapé plus tôt cette semaine et je ne pouvais pas croire que c'était le remède! Ceci est particulièrement étrange cependant parce que je ne me souviens pas du laboratoire de code, mentionnant même qu'il utilise FirebaseUI. De même, ils ont récemment [mis à jour les dépendances de l'exemple de code] (https://github.com/firebase/friendlychat-android/commit/a88cd214e5528e17fd3c234d83589d85872650e2) mais n'a pas ajouté cet appel de méthode très important! Je suppose que c'est ce qui se passe quand les bibliothèques font des changements brisants. – Grimthorr