从Firebase for Android中读取多个密钥的问题

时间:2018-03-10 19:19:09

标签: java android firebase firebase-realtime-database

我无法从数据库中读取多个密钥。这些键都是userID键的子项,但是,当我编写获取键值时,它只返回最近保存到ListView的值。

对于上下文,这适用于体育应用,每个键都是团队名称。使用此代码,它仅返回最近保存的团队名称,即使其他人在数据库中显示。该团队名称由用户输入,名称设置为变量,然后作为密钥保存到数据库中。它不会保存到java类。

我的阅读代码如下:

databaseReference.addValueEventListener(new ValueEventListener() {
       @Override
       public void onDataChange(DataSnapshot dataSnapshot) {
           Log.i("snap", "onDataChange: " + dataSnapshot.getValue());

           for(DataSnapshot ds: dataSnapshot.getChildren()) {
               for(DataSnapshot team: ds.getChildren()) {

                   String key = team.getKey();

                   Log.i("my team", team.toString());

                   ArrayList<Object> array = new ArrayList<>();
                   array.add(key);
                   ArrayAdapter adapter = new ArrayAdapter(StatisticsActivity.this, android.R.layout.simple_list_item_1, array);
                   listViewTeam.setAdapter(adapter);

               }
           }
           dataSnapshot.getValue();

       }

       @Override
       public void onCancelled(DatabaseError databaseError) {

       }
   });

任何有关如何让它返回的信息不仅仅是最近保存的密钥的提示或建议都会很棒。感谢。

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题那么你的问题在于你在for循环中创建了数组列表,并且每个项目都添加一个项目,即你在arraylist中添加一个项目,每次添加元素和集合适配器。所以在循环结束时,列表中有一个项目。 基本上你应该在for循环之外初始化你的arrayList,并向它迭代添加元素。添加所有元素后,再设置适配器。

您应该执行以下操作。

databaseReference.addValueEventListener(new ValueEventListener() {
ArrayList<Object> array = new ArrayList<>();
       @Override
       public void onDataChange(DataSnapshot dataSnapshot) {
           Log.i("snap", "onDataChange: " + dataSnapshot.getValue());

           for(DataSnapshot ds: dataSnapshot.getChildren()) {
               for(DataSnapshot team: ds.getChildren()) {

                   String key = team.getKey();

                   Log.i("my team", team.toString());


                   array.add(key);


               }
           }
        ArrayAdapter adapter = new ArrayAdapter(StatisticsActivity.this, android.R.layout.simple_list_item_1, array);
        listViewTeam.setAdapter(adapter);
        dataSnapshot.getValue();//I think this is not needed in your code.

       }

       @Override
       public void onCancelled(DatabaseError databaseError) {

       }
   });