How to get a String List from Firebase to fill a Spinner

22,012

I didn't test that code but, more or less, that is what you have to do:

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

    }
});

I hope it's helps!

Regards.

Share:
22,012
Alex Ardavin
Author by

Alex Ardavin

Updated on November 21, 2020

Comments

  • Alex Ardavin
    Alex Ardavin over 3 years

    my database is arranged like this:

    enter image description here

    I want to get all the values from areaName as a String List or any form of list and use it to populate a Spinner. The problem I am getting is that it only retrieves the last value (in this case "New York"). This is my actual code:

    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) {
    
            }
        });
    
  • Alex Ardavin
    Alex Ardavin almost 8 years
    And it helped wonderfully! Just what I wanted my brother, thank you very very much!! :D
  • Smac
    Smac almost 7 years
    Is there more code to this? Im trying to figure out this example to use in my own application and Im getting formatting errors
  • abo
    abo over 5 years
    @Javier In the above case Database related codes and UI codes are coupled. Wouldn't that is bad practice?