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
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...
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 onDataChange
usted 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