如何将数据从Firebase数据库读取到List

时间:2017-05-19 03:34:25

标签: android firebase firebase-realtime-database

在进入问题之前,这里是有问题的数据库结构

Database Structure in Firebase

因此,我正在尝试阅读子KkOz7Zg9iNqms1vZJA6下的所有可用数据。我现在面临的问题是阅读孩子-KkOz7Zg9iNqms1vZJA6 / articleTags内的价值观。我尝试使用以下代码

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*/}
       });

由于Key值只是"0", "1", "2", "3"等等,我尝试使用Integer b,它在For循环的每次迭代中递增。

列表tagList_Chosen甚至字符串TagName_Chosen始终返回空。有人能指出我的代码中的问题吗?我哪里错了?

由于

2 个答案:

答案 0 :(得分:1)

尝试这样,

在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                   
     }

答案 1 :(得分:0)

请使用此代码:

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*/}
});

希望它有所帮助。