2017-10-09 40 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