Как обновить объект в FireBase Я пытался сделать это, но он выполняется несколько раз? - PullRequest
0 голосов
/ 29 июня 2018

Я получил базу данных формы объекта, затем обновил ее методом addreport(), затем снова сохранил

FirebaseDatabase.getInstance().getReference("Users")
  .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
  .addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        Empinfo q = dataSnapshot.getValue(Empinfo.class);
        q.addreport(s);
        dataSnapshot.getRef().setValue(q);
        progressBar.setVisibility(View.GONE);
        Toast.makeText(getApplicationContext(), profileImageUrl, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
    }
});

Ответы [ 2 ]

0 голосов
/ 29 июня 2018
FirebaseDatabase.getInstance().getReference("Users")
  .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
  .addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        Empinfo q = dataSnapshot.getValue(Empinfo.class);
        q.addreport(s);
        dataSnapshot.getRef().setValue(q);
        progressBar.setVisibility(View.GONE);
        Toast.makeText(getApplicationContext(), profileImageUrl, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
    }
});

Я использовал addListenerForSingleValueEvent, который выбирает данные, но не обновляет в реальном времени вместо addValueEventListener, который обновляет данные при каждом изменении данных. Ваша проблема может быть вызвана использованием инструкции dataSnapshot.getRef().setValue(q); внутри метода onDataChange вызова addValueEventListener, поэтому в этом разделе была рекурсия.

0 голосов
/ 29 июня 2018

Используйте addListenerForSingleValueEvent() вместо addValueEventListener(). Вы реализовали непрерывный слушатель по ссылке. Вот что происходит ...

Шаг 1: Добавление слушателя в ссылку и получение данных. Этот слушатель постоянно прослушивает изменения в этой ссылке.

Шаг 2. Преобразование данных в объект и выполнение операций (ваша логика)

Шаг 3: Сохранить данные в базе данных. Теперь, когда вы изменили данные, ваш onDataChanged будет вызываться снова.

Шаг 4: Но на этот раз ваш объект уже обновлен, поэтому добавление q.addreport(s); не изменит объект.

Шаг 5: Вы пытаетесь сохранить данные в базе данных Firebase, но изменений нет, поэтому они будут прерваны.

Надеюсь, это поможет!

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