gpt4 book ai didi

java - 如何从 firebase 读取并在评级栏中显示

转载 作者:行者123 更新时间:2023-11-30 01:42:13 25 4
gpt4 key购买 nike

我有一个评级栏,它应该根据登录的用户显示单个用户的评级平均值。用户可以通过写入评级节点下的数据库来对另一个用户进行评级,如下所示 this is the view of the database under ratings

已评分的用户位于“评分者”节点下。请注意“-LxW7A......”是随机生成的 key 。要查看用户的评级(如果他被评级多次),我使用下面的代码来获取评级总和,并将其除以用户被评级的总次数以获得平均值

FirebaseUser user=mAuth.getCurrentUser();
String userId=user.getUid();
DatabaseReference refund =
FirebaseDatabase.getInstance().getReference("ratings");
Query query=refund.orderByChild("ratee").equalTo(userID);


final RatingBar ratingBar=(RatingBar)findViewById(R.id.ratingBar) ;
query.addValueEventListener(new ValueEventListener() {
int count=0;
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String rating=dataSnapshot.child("rater").getValue(String.class);
if (rating==null){Toast.makeText(getApplicationContext(),"empty ",Toast.LENGTH_SHORT).show();}else{
count=count+Integer.valueOf(rating);
double a = dataSnapshot.child("kutaPoints").getValue(double.class);
totalpointsused =+ a;
double tots=(double)count;
double result=totalpointsused/tots;
float abc=(float)result;
Toast.makeText(getApplicationContext(),""+abc,Toast.LENGTH_SHORT).show();

ratingBar.setRating(abc);
}}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});

但是上面的代码不起作用,评级栏中不显示任何内容,并且显示空的 toast。

最佳答案

当您使用以下查询时:

Query query=refund.orderByChild("ratee").equalTo(userID);

这意味着您在 onDataChange() 方法中作为参数获取的 DataSnapshot 对象包含结果列表。即使只有一个结果,正如我在屏幕截图中看到的那样,列表也将包含一个元素。因此,当谈论列表时,要获取元素,我们需要迭代列表。因此,请检查以下代码行:

ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long count = 0;
for(DataSnapshot ds : dataSnapshot.getChildren()) {
long ratingg = ds.child("ratingg").getValue(Long.class);
count = count + ratingg;
}
long avarage = count / dataSnapshot.getChildrenCount();
Log.d("TAG", "avarage: " + avarage);
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
query.addListenerForSingleValueEvent(valueEventListener);

假设所有 4 个用户的 ratingg 属性值均设置为 4,则 logcat 中的结果将是:

avarage: 4

关于java - 如何从 firebase 读取并在评级栏中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59553052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com