【问题标题】:How to update nested data in fire-base database android如何更新基于火的数据库android中的嵌套数据
【发布时间】:2019-02-08 21:24:18
【问题描述】:

Nested data in firebase database snap pic 大家好,我将数据存储在包含嵌套子项的实时数据库中,并且我通过使用推送功能存储了这些数据以避免覆盖问题,但现在问题我不知道如何获取我已经突出显示的特定数据在快照图像中。不幸的是,我正在努力获取嵌套数据以执行编辑或删除功能。以下是 addUser 类和获取数据到 RecyclerView 的部分

public class AddUserAppointment {

   private String StartBusinse;
   private String StartBusinseTime ;
    private String EndBusinseTime ;
   private String startFirstAppoint ;
   private String endSecondAppointment ;
   private String AppointmentStuts;
  // private String AppointmentKey;  

    public AddUserAppointment() {
        ////empty
    }

    public AddUserAppointment(String startBusinse, String startBusinseTime, String endBusinseTime, String startFirstAppoint, String endSecondAppointment, String appointmentStuts) {
        StartBusinse = startBusinse;
        StartBusinseTime = startBusinseTime;
        EndBusinseTime = endBusinseTime;
        this.startFirstAppoint = startFirstAppoint;
        this.endSecondAppointment = endSecondAppointment;
        AppointmentStuts = appointmentStuts;
    }

    public String getStartBusinse() {
        return StartBusinse;
    }

    public void setStartBusinse(String startBusinse) {
        StartBusinse = startBusinse;
    }

    public String getStartBusinseTime() {
        return StartBusinseTime;
    }

    public void setStartBusinseTime(String startBusinseTime) {
        StartBusinseTime = startBusinseTime;
    }

    public String getEndBusinseTime() {
        return EndBusinseTime;
    }

    public void setEndBusinseTime(String endBusinseTime) {
        EndBusinseTime = endBusinseTime;
    }

    public String getStartFirstAppoint() {
        return startFirstAppoint;
    }

    public void setStartFirstAppoint(String startFirstAppoint) {
        this.startFirstAppoint = startFirstAppoint;
    }

    public String getEndSecondAppointment() {
        return endSecondAppointment;
    }

    public void setEndSecondAppointment(String endSecondAppointment) {
        this.endSecondAppointment = endSecondAppointment;
    }

    public String getAppointmentStuts() {
        return AppointmentStuts;
    }

    public void setAppointmentStuts(String appointmentStuts) {
        AppointmentStuts = appointmentStuts;
    }

获取数据类

public class ListAppointmentCustomerClass extends AppCompatActivity {
    private DatabaseReference AppointmentRef,SeconDref;
    private FirebaseAuth mAuth;
    private String PostKey;
    private RecyclerView ListAllApointment;
    private String pushkey;
    private Button Book,Cancel;
    private String AppointmentKey;
    private String keyId;
    private String m_Text = "";
    private boolean AppointmentCondation = true;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_appointment_customer_class);
        //pushkey = AppointmentRef.getKey();

        PostKey = getIntent().getExtras().get("Postkey").toString();

        AppointmentRef = FirebaseDatabase.getInstance().getReference().child("Appointments").child(PostKey);

        ///

        ////
        ListAllApointment = (RecyclerView)findViewById(R.id.ListAppointmentView);
        LinearLayoutManager customerLayoutManager = new LinearLayoutManager(this);
        customerLayoutManager.setReverseLayout(true);
        customerLayoutManager.setStackFromEnd(true);
        ListAllApointment.setLayoutManager(customerLayoutManager);
        //TODO:All the methods shoud be list here
        DisplayuploadedAppointment();
    }

    public static class HolderClass extends RecyclerView.ViewHolder{
        View mView;
        Button bookAppointment , CancelAppoinment;

        public HolderClass(View itemView) {
            super(itemView);
            mView = itemView;

            bookAppointment = (Button)mView.findViewById(R.id.BookAnppointments);

        }

        public void setStartFirstAppoint(String startFirstAppoint){
          TextView StartAppointment = (TextView)mView.findViewById(R.id.StartAppointmet);
          StartAppointment.setText(startFirstAppoint);
        }
        public void setEndSecondAppointment(String endSecondAppointment){
            TextView EndAppointment = (TextView)mView.findViewById(R.id.EndAppointment);
            EndAppointment.setText(endSecondAppointment);

        }
        public void setAppointmentStuts(String appointmentStuts){
            TextView appointment = (TextView)mView.findViewById(R.id.BookingStatus);
            appointment.setText(appointmentStuts);
        }



    }

    private void DisplayuploadedAppointment() {
        FirebaseRecyclerAdapter<AddUserAppointment,HolderClass >AppointmentRecyclerAdapter =
                new FirebaseRecyclerAdapter<AddUserAppointment, HolderClass>
                        (
                                AddUserAppointment.class,
                                R.layout.listallapointment,
                                HolderClass.class,
                                AppointmentRef
                        ) {
                    @Override
                    protected void populateViewHolder(HolderClass viewHolder, AddUserAppointment model, final int position)
                    {


                        viewHolder.setStartFirstAppoint(model.getStartFirstAppoint());
                        viewHolder.setEndSecondAppointment(model.getEndSecondAppointment());
                        viewHolder.setAppointmentStuts(model.getAppointmentStuts());
                        viewHolder.mView.setTag(position);
                        viewHolder.bookAppointment.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                final DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child("Appointments").child(PostKey);

                                final String id = getRef(position).getKey();
                                mDatabase.child(id).addValueEventListener(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(DataSnapshot dataSnapshot) {
                                        for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                                            System.out.println("Id"+id);
                                            String bookingCondation = dataSnapshot.child("appointmentStuts").getValue().toString() ;
                                            HashMap hashMap = new HashMap<>();
                                            hashMap.put("appointmentStuts","Boooked");

                                           System.out.println("Postkey"+PostKey);
                                           mDatabase.updateChildren(hashMap).addOnCompleteListener(new OnCompleteListener() {
                                               @Override
                                               public void onComplete(@NonNull Task task) {

                                               }
                                           });



//                                            String key = snapshot.getKey().toString();
//                                            System.out.println(key);


//                                            String bookingCondation = dataSnapshot.child("appointmentStuts").getValue().toString() ;
//                                            System.out.println("Appointment Status "+bookingCondation);

                                           // Log.e("Appointment : " , "" + appointmentStuts+ap.getStartFirstAppoint()+key);


                                        }

                                    }

                                    @Override
                                    public void onCancelled(DatabaseError databaseError) {

                                    }
                                });

                            }
                        });


                    }
                };
        ListAllApointment.setAdapter(AppointmentRecyclerAdapter);



    }



    }

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    您可以像这样遍历用户来获取他们的数据:

      DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Appointments").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Iterator<DataSnapshot> dataSnapshots = dataSnapshot.getChildren().iterator();
    
                while (dataSnapshots.hasNext()) {
                    DataSnapshot dataSnapshotChild = dataSnapshots.next();
                    AddUserAppointment user = dataSnapshotChild.getValue(AddUserAppointment.class);
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });
    

    【讨论】:

    • 对于迭代器来说没问题,但是你放的 ArrayList,你指的是哪些约会我的意思是 ArrayList 的集合指的是哪里。提前致谢
    • 我的错!我昨天太虚弱了。之前我想将数据检索到arrayList,然后我意识到你已经有了一个模型类。我忘了删除 ArrayList 对象。
    • 您可以尝试让我知道它是否适合您。
    • 它没有,它仍然从父子获取所有数据,即 3dp8ich......等
    • 嗨,它以不同的方式工作,我只是通过了 Appointment id,然后检查 appoinemntStatus.equalTo("Available") 是否。但是,非常感谢你打开了一条路让我弄清楚
    猜你喜欢
    • 2022-09-25
    • 2019-01-24
    • 1970-01-01
    • 2018-10-31
    • 2020-07-08
    • 2020-05-15
    • 2020-12-07
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多