如何从firebase将键值设置为微调器列表

时间:2017-08-21 15:08:07

标签: android firebase firebase-realtime-database

I have database like this

我有微调器,我想从firebase添加键值以在微调器列表上设置。我使用下面的代码但不适合我。

我想在微调器中添加键值(2015-16,2016-17,2017-18)。

我的代码在这里无效。

  DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    rootRef.child("First").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            final List<String> sess = new ArrayList<String>();

            for (DataSnapshot areaSnapshot: dataSnapshot.getChildren()) {
                String Session = areaSnapshot.getKey();
                sess.add(Session);
            }

            Spinner spinner = (Spinner) findViewById(R.id.spinner3);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(AdminMain.this, android.R.layout.simple_spinner_item, sess);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

1 个答案:

答案 0 :(得分:0)

您在JSON树中监听的级别太高了。您的onDataChange()现在已使用CIVIL节点触发,而您可能希望将其降低一级。

rootRef.child("First/CIVIL").addValueEventListener(

有一点需要注意:这将加载每个日期下的所有数据,只是为了在微调器中显示该日期。如果这是大量数据,您就会浪费用户的带宽。

在这种情况下,我会考虑扁平化您的数据结构并保留一个单独的节点只包含日期:

"Dates": {
  "CIVIL": {
    "2015-16": true,
    "2016-17": true,
    "2017-18": true
  }
}

只需要true值即可确保Firebase不会删除密钥。下载JSON的这个分支可确保您只下载填充微调器所需的最少数据。