2017-10-09 2 views
1

Comment afficher la note dans la barre de notation basée sur Firebase? J'ai réussi à télécharger sa note sur Firebase.Comment afficher la note dans la barre de notation de Firebase?

Le code ci-dessous montre comment j'ai téléchargé la note en fonction de la barre d'évaluation de la base de données Firebase qui fonctionne correctement.

ratingRef.child("Rating").setValue(ratingstar); 
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
    @Override 
    public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
     Toast.makeText(UploadReviewAndRating.this, "Stars: " + (int)rating, Toast.LENGTH_SHORT).show(); 
    } 
}); 

Intent intent = new Intent(UploadReviewAndRating.this, ViewProfile.class); 
startActivity(intent); 

Le code ci-dessous montre comment afficher la barre de notation qui ne fonctionne pas. Quand je lance l'application, l'application se bloque et affiche une erreur:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference.

ratingRef.child("Ratings").addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     int rating = dataSnapshot.getValue(int.class); 
     ratingBar.setRating(rating); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 
+0

[Qu'est-ce qu'un NullPointerException, et comment puis-je résoudre ce problème?] (Https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) – Grimthorr

+0

J'ai vérifié et ne fonctionne toujours pas. Si possible, pouvez-vous montrer un exemple sur l'affichage de la note sur la barre de notation basée sur Firebase? il serait utile – Hakiim

+0

Vous devez vérifier que 'dataSnapshot' dans' onDataChange' n'est pas 'null' avant de l'utiliser. Notez également: vous avez utilisé '.child (" Rating ")' pour enregistrer, puis '.child (" Ratings ")' pour charger, qui sont différents. – Grimthorr

Répondre

1

Lorsque onRatingChanged() est appelé, vous devez enregistrer le résultat à la base de données en utilisant votre ratingRef.

ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
    @Override 
    public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
     if (fromUser) ratingRef.child("Rating").setValue(rating); 
    } 
}); 

Et puis attacher un écouteur à l'enfant le même ratingRef pour charger la note, tout en vérifiant que le résultat renvoyé de la base de données (dataSnapshot) n'est pas null.

ratingRef.child("Rating").addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot != null && dataSnapshot.getValue() != null) { 
      float rating = Float.parseFloat(dataSnapshot.getValue().toString()); 
      ratingBar.setRating(rating); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { } 
}); 
+0

merci pour la réponse et je suis désolé pour la mise à jour tardive. Je vais essayer plus tard. – Hakiim

+0

son dit ne peut pas résoudre la méthode 'valueOf (java.lang.Object)' est-il un moyen? – Hakiim

+0

Ah désolé, essayez: 'int rating = dataSnapshot.getValue (Integer.class);' à la place. – Grimthorr