addListenerForSingleValueEvent продолжает дублировать вывод - PullRequest
0 голосов
/ 07 апреля 2020

Я использую addListenerForSingleValueEvent, чтобы добавить значение в дочерний «код» текущего пользователя, но вместо этого данные дублируются. Вот база данных перед кодированием

Это кодирование для addListenerForSingleValueEvent

b4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mAuth = FirebaseAuth.getInstance();
                mUser = mAuth.getCurrentUser();
                final String UserId = mUser.getUid();

                mReference = FirebaseDatabase.getInstance().getReference("Users");
                final DatabaseReference currentUserId = mReference.child(UserId);
                currentUserId.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        User user = dataSnapshot.getValue(User.class);
                        user.setCode(riasec1);
                        currentUserId.child(UserId).setValue(user);
                    }

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

                    }
                });




            }
        });

Вот база данных после выполнения кодирования Почему весь пользователь дублируется, а не вставляется только значение "code"?

1 Ответ

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

Когда вы звоните

currentUserId.child(UserId).setValue(user);

, вы говорите "add WHOLE user in to node with name 'UserId'". Как правило, вы выбираете ВСЕГО пользователя, обновляете одно поле и обновляете снова.


Поэтому, когда вы хотите обновить дочерний элемент без перезаписи , весь объект должен пройти имя узла, например,

currentUserId.child(UserId).child("code").setValue(riasec1);

В этом вызове вы говорите:

  • найти узел с правильным идентификатором (UserId)
  • найти узел "code"
  • установить новое значение (riasec1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...