cuando cambie manualmente el valor de la base de datos base de fuego puedo crear más artículos en vista de lista en lugar de actualizar el valor en la vista de lista

ICEBlizzard:

No tengo idea de lo que va mal en mi código por favor me ayude. Sólo intentando recuperar datos a la vista de lista.

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

        }
    });
}

}

mi 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;
}

Debajo están las imágenes

Esta es la salida de mi Aplicación

Cuando cambio de valor en base de fuego base de datos manualmente crea más Artículos 3 como en la imagen

Sólo quiero actualizar el valor

No sé por qué se crea más elementos

Tengo sólo 3 niños en base de fuego

Sólo estoy recuperando datos, los datos se guardan de forma manual desde la consola de base de fuego

Por favor, ayúdame...

Gastón Saillén :

Al actualizar un valor en su base de datos, se disparará su

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

Una vez más, y que va a ir a buscar para todos los niños (incluido el actualizado) y se coloca dentro de la lista de nuevo este duplicará los artículos desde el interior de su onDataChangeusted tiene un bucle que se repetirá entre TODAS las niños de nuevo y se añadirlos de nuevo para la actual lista poblada.

Lo que hay que hacer, es limpiar la lista cuando se obtiene de nuevo

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

        }
    });

Otra manera de hacerlo es utilizar updateChildren () con un mapa, esto sólo actualizar el elemento que va a actualizar su base de datos

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=275802&siteId=1
Recomendado
Clasificación