从Firebase检索多个数据,返回null

时间:2018-12-07 15:28:50

标签: java android

我正在使用Firebase数据库存储和读取Android应用程序中的“俱乐部”列表。 下面是Json的表示形式。

{
  "clubs" : [ {
    "id" : 1,
    "image" : {
      "allocationByteCount" : 589824,
      "byteCount" : 589824,
      "config" : "ARGB_8888",
      "density" : 320,
      "generationId" : 212,
      "height" : 384,
      "mutable" : false,
      "premultiplied" : true,
      "recycled" : false,
      "rowBytes" : 1536,
      "width" : 384
    },
    "name" : "Axis"
  }, {
    "id" : 2,
    "image" : {
      "allocationByteCount" : 589824,
      "byteCount" : 589824,
      "config" : "ARGB_8888",
      "density" : 320,
      "generationId" : 214,
      "height" : 384,
      "mutable" : false,
      "premultiplied" : true,
      "recycled" : false,
      "rowBytes" : 1536,
      "width" : 384
    },
    "name" : "Allies"
  }, {
    "id" : 3,
    "image" : {
      "allocationByteCount" : 589824,
      "byteCount" : 589824,
      "config" : "ARGB_8888",
      "density" : 320,
      "generationId" : 216,
      "height" : 384,
      "mutable" : false,
      "premultiplied" : true,
      "recycled" : false,
      "rowBytes" : 1536,
      "width" : 384
    },
    "name" : "Neutrals"
  } ]
}

我正在使用FirebaseAdapter类在Firebase数据库上调用方法。 但是当尝试获得所有俱乐部时,它将返回null。

下面是调用它的方法:

public List<BDClub> getClubs() {

        list.clear();

        database.getReference("clubs").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    System.out.println(dataSnapshot.getChildrenCount());
                    for(DataSnapshot array : dataSnapshot.getChildren()){
                        clubs = array.getValue(BDClub[].class);
                        for(BDClub c : clubs){
                            list.add(c);
                        }
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }

        });

        return list;
    }

有没有办法检索俱乐部清单? 预先感谢。

1 个答案:

答案 0 :(得分:0)

查看您的Json表示形式,我认为clubs是主数据库参考中的子项,因此您可以尝试以下操作:

FirebaseDatabase.getInstance().getReference().child("clubs").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    System.out.println(dataSnapshot.getChildrenCount());
                    for(DataSnapshot array : dataSnapshot.getChildren()){
                        clubs = array.getValue(BDClub[].class);
                        for(BDClub c : clubs){
                            list.add(c);
                        }
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }

        }); 

提示: 不要从函数中返回这样的列表,因为这些调用是异步发生的,因此每次您都有很大的机会获得空列表,请使用侦听器: How to create our own Listener interface in android?