java浮点在datasnapshot循环中返回null
我试图从Firebase
检索评级数据,以计算rating bar
的平均值。下面是检索数据的代码
DatabaseReference ratingRef = FirebaseDatabase.getInstance().getReference("Rating");
ratingRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
double count = 0;
for(DataSnapshot ds : snapshot.getChildren()) {
//Toast.makeText(RibsAndPowerboats.this, "it is "+ds, Toast.LENGTH_SHORT).show();
double rating = Double.parseDouble(ds.child(RandomID).child("rating").getValue().toString());
count = count + rating;
}
double avarage = count / snapshot.getChildrenCount();
if (avarage == 0) {
ratingBar.setRating(avarage);
} else {
Toast.makeText(RibsAndPowerboats.this, "it is" + avarage, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException();
}
});
以下是提交活动:
String RandomID = getIntent().getStringExtra("RandomID");
if (RandomID != null){
String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Rating");
SubmitScore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
float RatedValue = ratingBar.getRating();
databaseReference.child(RandomID).child(userId).child("rating").setValue(RatedValue);
String SaveReview = AddReview.getText().toString();
String ScoreStrg = Float.toString(RatedValue);
Score.setText(ScoreStrg+" out of 5");
databaseReference.child(RandomID).child(userId).child("review").setValue(SaveReview);
Toast.makeText(SubmitRating.this, "Ευχαριστούμε!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(SubmitRating.this, RibsAndPowerboats.class);
startActivity(intent);
finish();
}
});
}
这是我的firebase数据库:
"Rating" : {
"3086181c-c391-4bab-a022-0a0e0bb2624c" : {
"Xqve54QUwwPo3NyZhcs2z4wkETB2" : {
"rating" : 4,
"review" : "Βδησηαησησσησησ"
}
}
}
我试图将变量从double改为float和long,但没有任何变化。有什么问题?显示的错误是:
Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
# 1 楼答案
为了能够在所有用户对象中获取“rating”属性的值,请使用以下代码行:
logcat中的结果将是每个用户对象下存在的
rating
属性的所有值