如何在Firebase中将多个孩子从一个节点移动到另一个节点?

时间:2017-12-20 06:58:06

标签: android firebase firebase-realtime-database

我需要有关如何将数据从一个节点移动到另一个节点的帮助。所以,这是我的数据库的截图。 https://imgur.com/a/26kSL

我需要从' mastersheet'中传输数据。节点到'事件'节点。您可以忽略有关添加事件名称的部分,即" Marathon"在这种情况下。 你可以放心地假设在" mastersheet"节点,"名称"将始终在" 2","电子邮件" at" 3"等等。

我知道如何转移个别孩子,但我不确定如何转移多个孩子,特别是通过为每个参与者生成推送ID。请帮帮我。

这是我的代码:

    DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("masterSheet"); //Open DBRef to raw data

 ref.addValueEventListener((new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot data: dataSnapshot.getChildren()){

                for(int i = 2; i<=5; i++)
                {
                    String val = data.child(String.valueOf(i)).getValue().toString();
                    String email = data.child("3").getValue().toString();

                    /*
                    Check if the email field is correct as that is very important
                     */
                    if(email.isEmpty() || !email.contains("@"))
                    {

                    }

                    else
                    {
                        switch(i){

                            /*
                            Based on the node, assign seperate column names and write in the appropriate values
                             */
                            case 2:
                                DatabaseReference Participants_name_ref = FirebaseDatabase.getInstance().getReference().child("Events").child(event_key).child("participants").child("Name");
                                Participants_name_ref.setValue(val);
                                break;
                            case 3:
                                DatabaseReference Participants_email_ref = FirebaseDatabase.getInstance().getReference().child("Events").child(event_key).child("participants").child("Email");
                                Participants_email_ref.setValue(val);
                                break;
                            case 4:
                                DatabaseReference Participants_CountryCode_ref = FirebaseDatabase.getInstance().getReference().child("Events").child(event_key).child("participants").child("Country Code");
                                Participants_CountryCode_ref.setValue(val);
                                break;
                            case 5:
                                DatabaseReference Participants_Phone_no_ref = FirebaseDatabase.getInstance().getReference().child("Events").child(event_key).child("participants").child("Phone Number");
                                Participants_Phone_no_ref.setValue(val);
                                break;
                            default:
                                break;




                        }

这样做,如果有50个条目,它只保存第50个条目的姓名,电子邮件ID,国家代码和电话号码,并跳过剩余的49个。

1 个答案:

答案 0 :(得分:0)

将数据从节点移动到另一个节点的解决方案如下。因为Firebase不提供神奇的move()方法,所以您需要自己完成,流程是这样的:

  1. mastersheet节点上附加一个侦听器。
  2. 循环DataSnapshot对象以获取所有孩子。
  3. 获取events节点的参考。
  4. 将包含mastersheet数据的此对象作为参数传递给setValue()方法,并直接在引用上使用该方法。
  5. 最重要的是,不要忘记从旧位置删除数据。