简体   繁体   English

如何从Firebase数据库读取数据到列表

[英]How to read data from Firebase database to a List

Before going into the issue here is the database structure in question 在讨论问题之前,这里是有问题的数据库结构

Firebase中的数据库结构

So, I am trying to read all available data under the child KkOz7Zg9iNqms1vZJA6 . 因此,我正在尝试读取子KkOz7Zg9iNqms1vZJA6下的所有可用数据。 The issue I am facing right now is in reading the Values inside the child -KkOz7Zg9iNqms1vZJA6 / articleTags . 我现在面临的问题是阅读子项-KkOz7Zg9iNqms1vZJA6 / articleTags的值。 I tried using the following code 我尝试使用以下代码

List<ModelContentTag> TagList_Chosen;

FirebaseDatabase.getInstance().getReference()
       .child("articles")
       .child("content")
       .child("ta")
       .child("all")
       .child("KkOz7Zg9iNqms1vZJA6")
       .addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                TagList_Chosen = new ArrayList<>();

                int b = 0;
                for (DataSnapshot tagNameSnapshot : dataSnapshot.getChildren()) {
                    String TagName_Chosen = tagNameSnapshot
                            .child("articleTags")
                            .child(String.valueOf(b))
                            .getValue(String.class);
                    TagList_Chosen.add(new ModelContentTag(TagName_Chosen));
                    Toast.makeText(getActivity(), TagName_Chosen, Toast.LENGTH_SHORT).show();
                    b++;
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {/*Do Nothing*/}
       });

Since the Key values are simply "0", "1", "2", "3" and so on, I tried using an Integer b which increments during every iteration in For loop. 由于键值只是"0", "1", "2", "3" ,因此我尝试使用Integer b ,它在For循环的每次迭代中都递增。

The List tagList_Chosen and even the String TagName_Chosen always returns empty. 列表tagList_Chosen甚至字符串TagName_Chosen始终返回空。 Can someone point me to the problem in my code? 有人可以指出我代码中的问题吗? Where am I going wrong? 我要去哪里错了?

Thanks 谢谢

Try like this way, 像这样尝试

Inside OnDataChange use iterator, 在OnDataChange内部使用迭代器,

  Iterator<DataSnapshot> dataSnapshotsChat = dataSnapshot.child("articleTags").getChildren().iterator();

  while (dataSnapshotsChat.hasNext()) {
                DataSnapshot dataSnapshotChild = dataSnapshotsChat.next();
                String TagName_Chosen = dataSnapshotChild.getValue(String.class); // check here whether you are getting the TagName_Chosen                   
     }

Please use this code: 请使用以下代码:

FirebaseDatabase.getInstance().getReference()
       .child("articles")
       .child("content")
       .child("ta")
       .child("all")
       .child("KkOz7Zg9iNqms1vZJA6")
       .child("articleTags")
       .addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                @SuppressWarnings("unchecked")
                Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                String firstValue = (String) map.get("0");
                String secondValue = (String) map.get("1");
                String thirdValue = (String) map.get("2");
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {/*Do Nothing*/}
});

Hope it helps. 希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM