如何从Firebase实时数据库中读取推送数据

时间:2018-06-20 14:11:03

标签: android firebase firebase-realtime-database

我的数据树-:

data-root
|
---sports
      |
      ----LGhshU00shj(Pushed Key)
                    |
                    ---socks
                           |
                           ---LGhdudy09(Pushed Key):Black
                           |
                           ---LGidiik84(Pushed Key):Red
                           |
                           ---LGiddv74(Pushed Key):Brown
                           |
                           ---colorType:Solid

如何烤面包显示“ Solid:Black”,“ Solid:Red”,“ Solid:Brown”?

已尝试-:

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Database userWritesRef = rootRef.child("sports").child("socks"); 

在OnStart()函数下-:

 userWritesRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot ds : dataSnapshot.getChildren()) {
                        String userWrite = ds.getValue(String.class);
                        Toast.makeText(context, userWrite, Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {}
            });

1 个答案:

答案 0 :(得分:0)

此代码rootRef.child("sports").child("socks")将创建对/sports/socks的引用。由于您的数据库中没有此类节点,因此它将创建一个不读取任何数据的侦听器。

您想要的是:

Database userWritesRef = rootRef.child("sports/LGhshU00shj/socks"); 

除此之外,您的数据结构有点奇怪,因为您正在将colorType(一个命名属性)与要生成的颜色混合在一起。您可以onDataChange中处理它们,只需要多花一些if

public void onDataChange(DataSnapshot dataSnapshot) {
    String colorType = dataSnapshot.child("colorType").getValue(String.class);
    for(DataSnapshot ds : dataSnapshot.getChildren()) {
        if (!ds.getKey().equals("colorType")) {
            String userWrite = ds.getValue(String.class);
            Toast.makeText(context, colorType+": "+userWrite, Toast.LENGTH_SHORT).show();
        }
    }
}