Как проверить существующие данные при использовании push ID с использованием Firebase? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть некоторые проблемы при проверке существующих данных в базе данных. Я хочу проверить дату данных, timeIn и timeOut, прежде чем вставлять данные в базу данных. Код, который я делаю, не работает, потому что он проверяет данные с помощью push 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) {

        }
    });






}

1 Ответ

0 голосов
/ 11 мая 2018

Если я не ошибаюсь, я понимаю, что вы хотите обновить это поле, просто если данные не существуют, а если существуют, ничего не делать.

  • В этом случае вам следует использоватьupdate вызов для обновления базы данных, если ваши данные существуют и равны тем же данным, которые вы хотите отправить, база данных ничего не сделает:

  • ВВ случае, если вы хотите избежать записи в любом случае, если данные уже существуют, вы должны использовать transaction.Из документации:

При работе с данными, которые могут быть повреждены одновременными изменениями, такими как инкрементные счетчики, вы можете использовать операцию транзакции.Вы даете этой операции два аргумента: функцию обновления и необязательный обратный вызов завершения.Функция обновления принимает текущее состояние данных в качестве аргумента и возвращает новое желаемое состояние, которое вы хотите записать.Если другой клиент выполняет запись в местоположение до того, как ваше новое значение будет успешно записано, ваша функция обновления вызывается снова с новым текущим значением, и запись повторяется.

Используя это, вы сможетепрочитайте данные, проверьте, существует ли он, и делайте все, что вам нужно, в зависимости от того, существует он или нет.

Подробнее о чтении и записи данных в Firebase можно прочитать по следующей ссылке в официальной документации: https://firebase.google.com/docs/database/android/read-and-write

Удачи!

...