【问题标题】:How to add more than one child under same parent in Firebase Realtime Database without using push()如何在不使用 push() 的情况下在 Firebase 实时数据库中的同一父级下添加多个子级
【发布时间】:2018-06-30 17:05:51
【问题描述】:

我是Firebase Realtime Database的新手,我想在不使用push()的情况下在父节点下生成唯一密钥。由于push()生成随机唯一密钥128 位。

我希望我的当前日期是父节点下的唯一键。如果日期与父节点的最后一个子节点不匹配,则它必须在父节点中生成一个新节点。

下面是我的代码:

     Firebase reference = new Firebase("https://maps-abcdxyz.firebaseio.com/user");
                    if (s.equals("null"))
                    {
                        String key = reference.child("User").push().getKey();

                        String inStatus = "1";

                        UserData user = new UserData(attendIN,"0","0","0");
                        Map<String, Object> postValues = user.inoutTime();
                        Map<String, Object> childUpdates = new HashMap<>();
                        childUpdates.put( "/" + username + "/" + month_name + "/" + todayDate ,postValues);

                        reference.updateChildren(childUpdates);

                        Toast.makeText(getApplicationContext(),"In Time Submitted",Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        if(jInStatus.equals("1"))
                        {
                            Toast.makeText(getApplicationContext(),"In time already Submitted",Toast.LENGTH_SHORT).show();
                        }
                        else
                        {
                            Firebase referenceDate = new Firebase("https://maps-abcdxyz.firebaseio.com/user/" + username +
                                    "/" + month_name);

                            String inStatus = "1";
                            FirebaseDatabase.getInstance().setPersistenceEnabled(true);
                            FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
                            DatabaseReference myRef = mDatabase.getReference("/" + "user" + "/" + username + "/"+ month_name + "/");
                            UserData user = new UserData(attendIN,inStatus,"0","0");
                            Map<String, Object> postValues = user.inoutTime();
                            Map<String, Object> childUpdates = new HashMap<>();
                            myRef.child(todayDate).setValue(postValues);

Toast.makeText(getApplicationContext(),"In Time Submitted",Toast.LENGTH_SHORT).show();
                        }

                    }

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    Firebase 数据库中的每个节点都是一个Map。正如我在您的代码中看到的那样,即使您正在添加数据或正在更新数据,您也对 todayDate 使用相同的值。因此,在Map 的情况下,它会将旧值替换为新值,从而产生一个孩子。

    要解决此问题,您需要为节点使用不同的值。我建议您使用push() 方法提供的随机生成密钥,而不是使用日期。

    【讨论】:

    • 我不想使用 push(),我知道它会为我创建随机的唯一 id。我希望我的日期对我来说必须是唯一的 id。下一个孩子必须是明天日期。
    • 然后将您的todayDate 的值更改为tomorrow 并相应地在您的参考中使用它。那么你的数据库中就会有另一个孩子。
    • 感谢您的解决方案。我在同一天更新状态,这就是为什么它没有在树结构中创建另一个键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 2017-09-24
    • 2012-08-07
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多