quand je change manuellement la valeur dans la base firebase je crée plus d'éléments dans ListView au lieu de la valeur mise à jour dans listview

ICEBlizzard:

Je ne sais pas ce qui ne va pas dans mon code S'il vous plaît Aide-moi. Juste essayer de récupérer des données à visualiser la liste.

mon 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) {

        }
    });
}

}

mon User.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;
}

Vous trouverez ci-images

Ceci est la sortie de My App

Quand je Modifier la valeur dans la base de données manuellement Firebase Crée 3 Plus des articles comme dans l'image

Je Je veux juste la valeur Mettre à jour

Je ne sais pas pourquoi il crée plus d'articles

J'ai seulement 3 enfants en firebase

Je suis juste en train de récupérer des données, les données sont enregistrées manuellement à partir de la console firebase

Aidez-moi, s'il vous plaît...

Gaston Saillen:

Lorsque vous mettez à jour une valeur dans votre base de données, il déclenchera votre

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

Encore une fois, et qui chercher pour tous les enfants (inclus une mise à jour) et sera placé à l' intérieur de la liste à nouveau cela dupliquer les objets depuis l' intérieur de votre onDataChangevous avez une boucle qui fera une boucle throught tous les enfants encore et les ajoutera à nouveau la liste actuelle peuplée.

Ce que vous devez faire, est d'effacer la liste quand est tiré par les cheveux à nouveau

ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list.clear();
            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) {

        }
    });

Une autre façon vous pouvez le faire est d'utiliser updateChildren () avec une carte, ce sera juste mettre à jour l'élément que vous mettez à jour votre base de données

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=275800&siteId=1
conseillé
Classement