【问题标题】:How to get a String List from Firebase to fill a Spinner如何从 Firebase 获取字符串列表以填充 Spinner
【发布时间】:2016-11-24 08:57:06
【问题描述】:

我的数据库是这样排列的:

我想从 areaName 中获取所有值作为字符串列表或任何形式的列表,并使用它来填充 Spinner。我遇到的问题是它只检索最后一个值(在本例中为“纽约”)。这是我的实际代码:

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

        }
    });

【问题讨论】:

  • 这里的 fDatabaseRoot.child 是什么?我可以看看它是如何初始化的吗?

标签: android arrays firebase spinner firebase-realtime-database


【解决方案1】:

我没有测试该代码,但或多或​​少是你必须做的:

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

    }
});

希望对你有帮助!

问候。

【讨论】:

  • 它帮助很大!正是我想要的我的兄弟,非常非常感谢! :D
  • 还有更多代码吗?我试图找出这个示例以在我自己的应用程序中使用并且我收到格式错误
  • @Javier 在上述案例中,数据库相关代码和UI代码是耦合的。那不是不好的做法吗?
猜你喜欢
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多