【问题标题】:How do I move multiple children from one node to another node in Firebase?如何在 Firebase 中将多个子节点从一个节点移动到另一个节点?
【发布时间】:2017-12-20 06:58:06
【问题描述】:

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

我需要将数据从“mastersheet”节点传输到“events”节点。在这种情况下,您可以忽略有关添加事件名称“马拉松”的部分。 您可以放心地假设在“mastersheet”节点下,“Name”将始终位于“2”,“email”始终位于“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 个。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2011-08-26
      • 2023-03-10
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      相关资源
      最近更新 更多