热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

onDataChange卡在无限循环中

如何解决《onDataChange卡在无限循环中》经验,为你挑选了1个好方法。

我正在尝试使用Firebase为餐厅和酒吧创建评分系统。到目前为止,我已经能够读写各个等级。我遇到的问题是,为了计算特定餐厅的平均评分,我需要获取已存储的评分数量和所​​有已存储评分的总价值。目前,我正在努力存储评分值。这是我的代码

Query RetrieveRating =  databaseReference.child("ratings").child("porterhouse");
RetrieveRating.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot postSnapshot) {

   //get data from snapshot
    String  data = postSnapshot.child("numRating").getValue().toString();

    if (!data.equals(null)) {
        String numRating = (String) postSnapshot.child("numRating").getValue();

        count = Integer.valueOf(numRating);
        count++;

        ratingCounter = Integer.toString(count);

        databaseReference.child("ratings").child("porterhouse").child("numRating").setValue(ratingCounter);
     }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

发生的事情是,它正在获取当前存储的值,将其加1并将其写回数据库,但是,每次存储onDataChange()方法时,都会调用一次,再次加1并无限循环。我的问题是,可以进行任何更改以防止这种情况发生,甚至可以通过其他方式进行配置吗?谢谢

更新

json代码如下:

    {
      "ratings" : {
        "porterhouse" : {
          "numRating" : "0",
          "totalRating" : "0"
        }
  }

Martin De Si.. 6

使用addListenerForSingleValueEvent

RetrieveRating.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot postSnapshot) {

            //get data from snapshot
            String  data = postSnapshot.child("numRating").getValue().toString();

            if (!data.equals(null)) {
                String numRating = (String) postSnapshot.child("numRating").getValue();

                count = Integer.valueOf(numRating);
                count++;

                ratingCounter = Integer.toString(count);



                databaseReference.child("ratings").child("porterhouse").child("numRating").setValue(ratingCounter);

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

您还应该使用Firebase事务来增加计数器



1> Martin De Si..:

使用addListenerForSingleValueEvent

RetrieveRating.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot postSnapshot) {

            //get data from snapshot
            String  data = postSnapshot.child("numRating").getValue().toString();

            if (!data.equals(null)) {
                String numRating = (String) postSnapshot.child("numRating").getValue();

                count = Integer.valueOf(numRating);
                count++;

                ratingCounter = Integer.toString(count);



                databaseReference.child("ratings").child("porterhouse").child("numRating").setValue(ratingCounter);

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

您还应该使用Firebase事务来增加计数器


推荐阅读
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • IhaveaFirebasedatabasethatismodeledassuch:我有一个这样建模的Firebase数据库::users:some-random ... [详细]
  • Conflictwithfirebase11.8.0andgoogle-servicesplugin3.1.2 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • java布尔字段用is前缀_POJO类中布尔类型的变量都不要加is前缀详解
    前言对应阿里巴巴开发手册第一章的命名风格的第八条。【强制】POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。反例:定义为基本 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
辣妈最___潮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有