2017-10-09 62 views
1

如何在基於Firebase的評分欄中顯示評分?我已成功上傳Firebase的評分。如何在Firebase的評分欄中顯示評分?

下面的代碼顯示了我是如何將評級欄上的評級上傳到Firebase的,它能夠成功運行。

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

下面的代碼顯示了我如何顯示不起作用的評級欄。當我運行應用程序,該應用程序崩潰,並顯示錯誤:

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

[什麼是空指針異常,怎麼解決呢?(https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix - 我) – Grimthorr

+0

我有檢查,但仍然沒有鐵鍋。如果可能的話,你可以舉例說明在基於firebase的評級欄上顯示評級嗎?這將有所幫助 – Hakiim

+0

您需要在使用它之前檢查'onDataChange'中的'dataSnapshot'是否爲'null'。還要注意:您已經使用'.child(「評級」)來保存,然後使用'.child(「評級」)來加載,這是不同的。 – Grimthorr

回答

1

onRatingChanged()叫您需要使用ratingRef將結果保存到數據庫中。

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

然後附加一個偵聽同一ratingRef孩子加載等級,同時還檢查從數據庫(dataSnapshot)返回的結果是不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

感謝您的回覆,我很抱歉遲到更新。我會稍後再試。 – Hakiim

+0

它說不能解決方法'valueOf(java.lang.Object)'有沒有辦法? – Hakiim

+0

對不起,試試:'int rating = dataSnapshot.getValue(Integer.class);'改爲。 – Grimthorr