如何在Firebase中显示评级栏中的评级?

时间:2017-10-09 11:40:20

标签: android firebase firebase-realtime-database ratingbar

如何根据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:尝试调用虚方法' int java.lang.Integer.intValue()'在null对象引用上。

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

    }
});

1 个答案:

答案 0 :(得分: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) { }
});