如何在不使用push()的情况下在Firebase实时数据库中的同一父项下添加多个子项

时间:2018-01-22 05:42:27

标签: android firebase firebase-realtime-database

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

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

下面提到的是我的代码:

     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();
                        }

                    }

1 个答案:

答案 0 :(得分:0)

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

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