Попытка обновить базу данных addValueEventListener - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь обновить свою базу данных. То, что я делаю, не работает. При первом вызове этого метода он обновляет базу данных, но завершает действие. Во второй раз, когда я вызываю этот метод, он попадает в бесконечное число l oop.

public void savePractice(){
        //This Method saves the Practice in the Database under the Athlete practices
        currentAthleteRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                currentAthlete = dataSnapshot.getValue(Athlete.class);
                if (currentAthlete.practices == null){
                    currentAthlete.practices = new ArrayList<Practice>();
                    currentAthlete.practices.add(practice);
                }
                else {
                    currentAthlete.practices.add(practice);
                }
                currentAthleteRef.child("Practices").setValue(currentAthlete.practices);
                finish();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                showProgress("Failed to find Athlete please tell us!!!!!!");
            }
        });
    }

1 Ответ

0 голосов
/ 10 апреля 2020

Я предполагаю, что вы хотите прочитать данные только один раз и обновить их. Однако это не то, что делает ваш код: addValueEventListener добавляет полупостоянный прослушиватель, который продолжает активно прослушивать данные, пока вы не удалите их.

Если вы хотите прочитать значение только один раз, а затем остановить при прослушивании изменений следует использовать:

currentAthleteRef.addListenerForSingleValueEvent(...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...