когда я вручную изменяю значение в базе данных Firebase, я создаю больше элементов в просмотре списка вместо обновления значения в просмотре списка - PullRequest
0 голосов
/ 12 марта 2020

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

My MainActivity. java

public class MainActivity extends AppCompatActivity {

ListView listView;
FirebaseDatabase database;
DatabaseReference ref;
ArrayList<String> list;
ArrayAdapter <String> adapter;
User user;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    user = new User();

    listView = findViewById(R.id.listView);

    database = FirebaseDatabase.getInstance();
    ref = database.getReference("match1contest1");
    list = new ArrayList<>();
    adapter = new ArrayAdapter<String>(this,R.layout.user_info,R.id.userInfo, list);
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds: dataSnapshot.getChildren()){

                user = ds.getValue(User.class);
                list.add(user.getName().toString()+user.getEmail().toString());

            }
            listView.setAdapter(adapter);

        }

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

        }
    });
}

}

Мой пользователь. java

public class User {

private String name;
private String email;
private String phone;
private String userName;
private String password;

public User() {
}

public User(String name, String email, String phone, String userName, String password) {
    this.name = name;
    this.email = email;
    this.phone = phone;
    this.userName = userName;
    this.password = password;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

Ниже приведены изображения

This is The Output Of My App

When I Change Value in FireBase Database Manually It Creates 3 More Items Like in The Image

Я просто хочу обновить значение

Я не знаю, почему он создает больше элементов

У меня всего 3 ребенка в базе данных Firebase

Я просто получаю данные, данные сохраняются вручную из консоли Firebase

Пожалуйста, помогите мне ...

1 Ответ

0 голосов
/ 12 марта 2020

Когда вы обновите значение в вашей базе данных, оно снова вызовет ваш

public void onDataChange(@NonNull DataSnapshot dataSnapshot) {...

, который будет выбран для всех детей (включая обновленный) и будет снова помещен в список, это будет продублируйте элементы, так как внутри вашего onDataChange у вас есть значение для l oop, которое снова будет l oop через всех детей и снова добавит их в текущий заполненный список.

Что вам нужно сделать , - очистить список при повторном получении в вашей базе данных

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