【问题标题】:Calculate Sum of values from firebase从firebase计算值的总和
【发布时间】:2018-03-01 03:32:20
【问题描述】:

我想计算 Firebase 数据库节点中所有评级值(浮点数)的总和,并希望在文本框中显示。

Firebase 数据库

Firebase DATABASE Preview 我要检索的评级值。我想要所有评级值的总和并将该总和值保存在文本框中。 这是我所做的

数据库类

public class databaseReview {
String description,name,userImage;
String rating;

public  databaseReview(){

}
public String getRating() {
    return rating;
}

public void setRating(String rating) {
    this.rating = rating;
}

public databaseReview(String rating, String description) {
    this.rating = rating;
    this.description = description;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
public String getuserImage() {
    return userImage;
}

public void setuserImage(String userImage) {
    this.userImage = userImage;
}

}

Java 类

                 DatabaseReference dataReference =   
               FirebaseDatabase.getInstance().
              getReference().child("Feedbacks").child(name);
      dataReference.addValueEventListener(new ValueEventListener() {
          @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


            for( DataSnapshot ds :dataSnapshot.getChildren()) {
                databaseReview data = ds.getValue(databaseReview.class);


            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });

【问题讨论】:

  • 此时您到底遇到了什么问题?

标签: android firebase firebase-realtime-database


【解决方案1】:

假设Feedbacks 节点是您的Firebase 根的直接子节点,并且name 变量的值为Abasyn University Islamabad,要计算所有评分,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference nameRef = rootRef.child("Feedbacks").child(name);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        double count = 0;
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            double rating = ds.child("rating").getValue(Double.class);
            count = count + rating;
        }
        Log.d("TAG", count + "");
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
nameRef.addListenerForSingleValueEvent(eventListener);

但请注意,这只有在 raiting 属性作为 double 存储在您的数据库中时才有效。您的屏幕截图是正确的,但您的模型类显示:

String rating;

【讨论】:

  • 地址变量出错 -- Log.d("count", address);
  • 对不起,我的错误。请查看我的更新答案以及我更新的文本。
  • 好的,我明白了,让我试试,但 Double.class 是什么?在里面?是数据库类的名字吗?
  • 不,我们将Double.class 作为参数传递给getValue() 方法以表明我们得到的结果是一个Double。等同于:double rating = (Double) ds.child("rating").getValue();
  • 您没有将 nameRef 与 onDataChange 链接?他怎么会知道参考资料?
猜你喜欢
  • 2022-01-28
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
相关资源
最近更新 更多