web-dev-qa-db-ja.com

スピナーを埋めるためにFirebaseから文字列リストを取得する方法

私のデータベースは次のように配置されています:

enter image description here

areaNameからすべての値を文字列リストまたは任意の形式のリストとして取得し、それを使用してスピナーに入力します。私が得ている問題は、最後の値(この場合は「ニューヨーク」)しか取得しないことです。これは私の実際のコードです:

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

私はそのコードをテストしませんでしたが、多かれ少なかれ、それはあなたがしなければならないことです:

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

    }
});

お役に立てば幸いです。

よろしく。

24
Javier Vargas