【问题标题】:How to check existing data when using push ID using Firebase?使用 Firebase 使用推送 ID 时如何检查现有数据?
【发布时间】:2018-10-21 16:26:25
【问题描述】:

我在检查 firebase 上的现有数据时遇到了一些问题。我想在将数据插入 Firebase 之前检查数据日期、时间输入和超时时间。我制作的代码不起作用,因为它通过推送 id 检查数据。

 private void addCourtBooking(){
    CourtBookingDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

                if ((dataSnapshot.child(dateinput.getText().toString()).exists() && dataSnapshot.child(timeStartSpinner.getSelectedItem().toString()).exists()) && dataSnapshot.child(timeEndSpinner.getSelectedItem().toString()).exists()) {

                    Toast.makeText(getApplicationContext(), "Exist", Toast.LENGTH_LONG).show();



                }else {

                    UCourtType = txtCourtType.getText().toString();
                    UPurpose = sp.getSelectedItem().toString();
                    UDate = dateinput.getText().toString();
                    UTimeStart = timeStartSpinner.getSelectedItem().toString();
                    UTimeEnd = timeEndSpinner.getSelectedItem().toString();
                    Map CourtBookinginformation = new HashMap();
                    CourtBookinginformation.put("courtType",UCourtType);
                    CourtBookinginformation.put("purpose",UPurpose);
                    CourtBookinginformation.put("date",UDate);
                    CourtBookinginformation.put("timeIn",UTimeStart);
                    CourtBookinginformation.put("timeOut",UTimeEnd);                      
                    CourtBookingDatabase.setValue(CourtBookinginformation);
                    Toast.makeText(getApplicationContext(),"Booking Successfull", Toast.LENGTH_LONG).show();
                }




        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });






}

【问题讨论】:

    标签: firebase firebase-realtime-database push


    【解决方案1】:

    如果我没记错的话,我知道您想在数据不存在的情况下更新该字段,如果存在,则什么也不做。

    • 在这种情况下,您应该使用 update 调用来更新数据库,以防您的数据存在并且等于您要推送的相同数据,数据库将什么也不做: p>

    • 如果您想在任何情况下避免写入,如果数据已经存在,您应该使用transaction。来自文档:

    在处理可能被并发修改损坏的数据时,例如增量计数器,您可以使用事务操作。你给这个操作两个参数:一个更新函数和一个可选的完成回调。 update 函数将数据的当前状态作为参数,并返回您想要写入的新状态。如果另一个客户端在您的新值成功写入之前写入该位置,则使用新的当前值再次调用您的更新函数,并重试写入。

    使用它,您将能够读取数据,检查它是否存在,并根据它是否存在执行您需要的任何操作。

    您可以在官方文档的下一个链接中阅读有关在 Firebase 中读取和写入数据的更多信息: https://firebase.google.com/docs/database/android/read-and-write

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      相关资源
      最近更新 更多