Firebase получает данные слишком много раз

Я использовал recyclerview, arraylist и firebase для получения и отображения данных, но данные добавляются в список слишком много раз.

Это мой код

database=FirebaseDatabase.getInstance();
    mRef=database.getReference("SETS");

    mRef.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if(dataSnapshot==null) return;
            for(DataSnapshot userSanpshot : dataSnapshot.getChildren())
            {
                if(userSanpshot.child("DETAIL").getValue()==null) break;
               single.Detail=userSanpshot.child("DETAIL").getValue().toString();
                /~/
               list.add(single);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    adapter.setItems(list);

и это мой код, когда я отправляю данные в firebase

Button sharebut=(Button)findViewById(R.id.usersend);
    sharebut.setOnClickListener(
            new FloatingActionButton.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mDatabase.child("SETS").child(userId).child("DETAIL").setValue(detailText.getText().toString());
                    /~/
                    finish();
                }
            }
    );

}

добавить list.clear (); как первая строка внутри метода onDataChange

Jinson Paul 26.10.2018 06:17

Проверьте это.

Alex Mamo 26.10.2018 07:13

@JinsonPaul Спасибо, работает. Но когда я перезапускаю приложение, список меняется; все данные меняются на самые свежие.

이민지 27.10.2018 14:27

потому что addValueEventListener всегда извлекает последние данные или все данные, хранящиеся в указанном вами узле

Jinson Paul 29.10.2018 05:38
0
4
49
1

Ответы 1

Попробуйте использовать этот метод

mRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    // do here your work
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {
    // handle error here
  }
});

Я изменил, и я думаю, что количество данных такое же, как в firebase .. но данные все те же (последние данные)

이민지 27.10.2018 14:20

Другие вопросы по теме