ma base de données est organisée comme ceci:
Je veux obtenir toutes les valeurs de areaName sous forme de liste de chaînes ou de toute forme de liste et l'utiliser pour remplir un Spinner. Le problème que j'obtiens est qu'il ne récupère que la dernière valeur (dans ce cas "New York"). Voici mon code actuel:
fDatabaseRoot.child("areas").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot areaSnapshot: dataSnapshot.getChildren()) {
String areaName = areaSnapshot.child("areaName").getValue(String.class);
Spinner areaSpinner = (Spinner) findViewById(R.id.spinner);
final String[] areas = {areaName};
ArrayAdapter<String> areasAdapter = new ArrayAdapter<String>(UAdminActivity.this, Android.R.layout.simple_spinner_item, areas);
areasAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
areaSpinner.setAdapter(areasAdapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Je n'ai pas testé ce code mais, plus ou moins, c'est ce que vous devez faire:
fDatabaseRoot.child("areas").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Is better to use a List, because you don't know the size
// of the iterator returned by dataSnapshot.getChildren() to
// initialize the array
final List<String> areas = new ArrayList<String>();
for (DataSnapshot areaSnapshot: dataSnapshot.getChildren()) {
String areaName = areaSnapshot.child("areaName").getValue(String.class);
areas.add(areaName);
}
Spinner areaSpinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> areasAdapter = new ArrayAdapter<String>(UAdminActivity.this, Android.R.layout.simple_spinner_item, areas);
areasAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
areaSpinner.setAdapter(areasAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
J'espère que ça aide!
Cordialement.