Firebase 实时数据库中的数据插入无限

穆罕默德·哈西卜

在检查匹配的几个值并将我的数据插入这些对象后,我试图在 firebase 中插入数据。但它在数据插入之前运行良好,因为数据插入代码执行主 UI 线程停止并且在 firebase 实时数据库中开始无限插入。

这是代码:

final Schedule schedule = new Schedule(latestCalendar.getTimeInMillis(),String.valueOf(hourOfDay)+":"+String.valueOf(minute)+" - "+String.valueOf(hourOfDayEnd)+":"+String.valueOf(minuteEnd));
final HashMap<String, Object> teamMap = (HashMap<String, Object>) new ObjectMapper().convertValue(schedule, Map.class);
AppBaseActivity.firebaseDatabase.getReference().child("Users").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
            final UserModel user = postSnapshot.getValue(UserModel.class);
            AppBaseActivity.firebaseDatabase.getReference().child("Users").child(user.getUid()).child("Teams").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                        final Team myTeam = postSnapshot.getValue(Team.class);
                        if (teamID.equals(myTeam.getTid())) {
                            final String tid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
                            // It goes infinite on this code
                            AppBaseActivity.firebaseDatabase.getReference().child("Users").child(user.getUid()).child("Teams").child(myTeam.getTid()).child("Schedule").child(tid).setValue(teamMap);
                        }
                    }
                }

                @Override
                public void onCancelled(DatabaseError error) {
                    // Failed to read value
                    Toast.makeText(ScheduleTeam.this, getString(R.string.cancel), Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    @Override
    public void onCancelled(DatabaseError error) {
        // Failed to read value
        Toast.makeText(ScheduleTeam.this,getString(R.string.cancel),Toast.LENGTH_SHORT).show();
    }
弗兰克·范·普费伦

您的代码看起来非常复杂。请记住,附加侦听器/Users会将所有用户入您的 Android 应用程序。如果您只是在寻找一个特定的用户,加载所有这些用户会浪费 Android 设备的大量带宽和处理能力。通过使用查询,您最好只加载您需要的用户:

DatabaseReference users =
AppBaseActivity.firebaseDatabase.getReference().child("Users");
Query userQuery = users.orderByChild("tid").equalTo(teamID);
userQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
            final UserModel user = postSnapshot.getValue(UserModel.class);
            for (DataSnapshot teamSnapshot: postSnapshot.child("Teams")
                final Team myTeam = teamSnapshot.getValue(Team.class);
                if (teamID.equals(myTeam.getTid())) {
                    final String tid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
                    teamSnapshot.getRef().child("Schedule").child(tid).setValue(teamMap);
                }
            });
        }
    }

    @Override
    public void onCancelled(DatabaseError error) {
        Toast.makeText(ScheduleTeam.this,getString(R.string.cancel),Toast.LENGTH_SHORT).show();
    }

一些变化:

  1. 此代码仅读取与tid值相等的用户teamID
  2. 这段代码直接从它已经加载的数据快照中读取该用户的团队,而不是附加另一个侦听器。
  3. 此代码Schedule从快照构建到 的路径,而不是从根重建它。

据我所知,此代码与您的代码相同。但是那里发生了一些事情,所以可能会有小错误。一般来说,我建议尝试理解我上面描述的 3 个更改,因为它们可能比复制/粘贴代码更有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Firebase实时数据库中删除?

来自分类Dev

Firebase实时数据库addValueEventListener

来自分类Dev

如何从Firebase中的实时数据库获取数据

来自分类Dev

Firebase:从实时数据库中检索childByAutoID

来自分类Dev

从Firebase实时数据库读取特定数据

来自分类Dev

React + Firebase:如何添加项目以将数据列表到firebase实时数据库中

来自分类Dev

Web中的Flutter Firebase实时数据库

来自分类Dev

数据更改后如何从Firebase实时数据库中检索特定数据

来自分类Dev

如何从Firebase实时数据库读取数据

来自分类Dev

Firebase实时数据库读取数据

来自分类Dev

Firebase实时数据库-规则

来自分类Dev

更改Firebase实时数据库数据位置

来自分类Dev

Firebase实时数据库addValueEventListener

来自分类Dev

Android:Firebase实时数据库

来自分类Dev

如何更新Firebase实时数据库中的位置?

来自分类Dev

Firebase 实时数据库的问题

来自分类Dev

Android Firebase 实时数据库获取数据太慢

来自分类Dev

从 Firebase 实时数据库中检索子数据

来自分类Dev

如何从firebase实时数据库中选择数据

来自分类Dev

Firebase 实时数据库帖子

来自分类Dev

显示来自 Firebase 实时数据库的数据

来自分类Dev

在实时数据库中存储 Firebase 云消息

来自分类Dev

从 Firebase 实时数据库中检索好友

来自分类Dev

从 Firebase 实时数据库流式传输数据

来自分类Dev

Firebase 实时数据库,从键值对中获取数据

来自分类Dev

Firebase 实时数据库读写数据协议与android

来自分类Dev

如何获取firebase实时数据库的数据

来自分类Dev

无法从 Firebase 实时数据库获取数据

来自分类Dev

无法从 Firebase 实时数据库中检索数据

Related 相关文章

热门标签

归档