web-dev-qa-db-fra.com

Comment obtenir une liste de chaînes de Firebase pour remplir un Spinner

ma base de données est organisée comme ceci:

enter image description here

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

        }
    });
10
Alejandro Ardavín

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.

24
Javier Vargas