Android 安卓&x2B;汇总解析查询的值

Android 安卓&x2B;汇总解析查询的值,android,parse-platform,Android,Parse Platform,我有以下问题: 我想总结一下评级(Column“评级”),然后计算一个平均评级。 不幸的是,这不起作用,在我看来,问题出在foreach循环中。变量avg在循环后没有值,我看不出原因。 非常感谢你的帮助 表“RateAndComment” 受保护的双重总额定值; 受保护的int i; 保护浮动平均值; 公共void(字符串objectId) { //ParseQuery=ParseQuery.getQuery(“RateAndComment”); ParseQuery=新的ParseQuery

我有以下问题: 我想总结一下评级(Column“评级”),然后计算一个平均评级。 不幸的是,这不起作用,在我看来,问题出在foreach循环中。变量avg在循环后没有值,我看不出原因。 非常感谢你的帮助

表“RateAndComment”

受保护的双重总额定值;
受保护的int i;
保护浮动平均值;
公共void(字符串objectId)
{
//ParseQuery=ParseQuery.getQuery(“RateAndComment”);
ParseQuery=新的ParseQuery(“RateAndComment”);
查询:whereEqualTo(“PlaceObjectId”,objectId);
findInBackground(新的FindCallback(){
@凌驾
公共作废完成(列表,
com.parse.parse异常(e){
如果(e==null){
i=0;
用于(ParseObject对象:列表){
totalRating=totalRating+obj.getDouble(“评级”);
i=i+1;
}
}否则{
Log.d(“检索后”,“错误:+e.getMessage());
}
}
}
);
平均值=(浮动)总额定值/i;
avd(objectId);
}

传递到
query中的
FindCallback
done
方法。findInBackground
将在稍后的时间点(查询完成后)执行

在计算
i
之前执行。将其移动到
done
方法中,您应该会很好。
在调用
avgRating
之前,调用
calculating
后会有一个延迟,因此您可能应该显示一些加载UI或一些其他指示,表明后台正在发生某些事情。

您熟悉术语
异步
?是的,但老实说,我看不出它怎么适合这个问题。你能给我指一下正确的方向吗?你是从看医生开始的吗?(这里的关键词是背景中的
)我阅读了文档:非常感谢您的解答和解释。现在它工作正常,性能还不是问题,但我会记住这一点。当findInBackground执行网络请求时,您的最终用户在3G(或更糟)连接上使用您的应用时,可能会遇到性能问题。记住这一点总是好的。
    protected double totalRating;
    protected int i;
    protected float avg;

public void CalculateRating(String objectId)
    {


        //ParseQuery<ParseObject> query = ParseQuery.getQuery("RateAndComment");
        ParseQuery query = new ParseQuery("RateAndComment");
        query.whereEqualTo("PlaceObjectId",objectId);
        query.findInBackground(new FindCallback<ParseObject>() {
                                   @Override
                                   public void done(List<ParseObject>list,
                                    com.parse.ParseException e) {
                                       if (e == null) {
                                           i=0;
                                           for (ParseObject obj : list) {
                                               totalRating = totalRating + obj.getDouble("Rating");
                                               i = i + 1;
                                           }
                                       } else {
                                           Log.d("Post retrieval", "Error: " + e.getMessage());
                                       }
                                   }

                               }
        );
        avg = (float) totalRating/i;
        avgRating(objectId);
    }
avg = (float) totalRating/i;
avgRating(objectId);