【发布时间】:2021-08-05 23:01:32
【问题描述】:
好吧,我正在尝试从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();
}
});
这里是 SubmitRatingActivity:
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,但没有任何变化。问题是什么?出现的错误是:
尝试在空对象引用上调用虚拟方法“java.lang.String java.lang.Object.toString()”
【问题讨论】:
-
您在问题中包含了 JSON 树的图片。请将其替换为实际的 JSON 作为文本,您可以通过单击 your Firebase Database console 的溢出菜单 (⠇) 中的 Export JSON 链接轻松获得。请同时显示多个子节点,以便我们了解您正在阅读的内容的更多上下文。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
-
@FrankvanPuffelen 我做到了,伙计。感谢您的详细评论!
-
谢谢。
RandomID的确切值是多少?如果您对该值进行硬编码,您是否也可以重现该问题?如果是这样,请显示带有硬编码值的代码,这样我们就不必跟踪变量了。 -
应该可以找出正在打印的对象是
null,尤其是通过堆栈跟踪检查它在哪一行。 -
@FrankvanPuffelen 我不知道如何硬编码这个值。但是当我打开应用程序时它会崩溃并显示我在上面附加的错误。
标签: java android firebase firebase-realtime-database