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

Android 下如何从Firebase实时数据库读取推送数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我的数据树-: data-root | ---sports | ----LGhshU00shj(Pushed Key) | ---socks | ---LGhdudy09(Pushed Key):Black |

我的数据树-:

data-root
|
---sports
      |
      ----LGhshU00shj(Pushed Key)
                    |
                    ---socks
                           |
                           ---LGhdudy09(Pushed Key):Black
                           |
                           ---LGidiik84(Pushed Key):Red
                           |
                           ---LGiddv74(Pushed Key):Brown
                           |
                           ---colorType:Solid
我如何制作一个显示“固体:黑色”、“固体:红色”、“固体:棕色”的吐司

已尝试-:

 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) {}
            });

此代码
rootRef.child(“运动”).child(“袜子”)
将创建对
/sports/socks
的引用。由于数据库中没有这样的节点,它将创建一个不读取数据的侦听器

你想要的是:

Database userWritesRef = rootRef.child("sports/LGhshU00shj/socks"); 
除此之外,您的数据结构有点奇怪,因为您将
colorType
(命名属性)与看起来生成的颜色混合在一起。您可以在
onDataChange
中处理它们,如果s:

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();
        }
    }
}

你已经试过什么了?请检查更新的问题@FrankvanPuffelenThanks。我取消了我的否决票,希望其他人也会这样做。一般来说,您会发现显示将防止向下投票和关闭投票,这是在堆栈溢出方面获得帮助的最佳方式。@FrankvanPuffelen对此表示感谢,在发布另一个问题之前肯定会阅读文档。感谢您的回答,但“LGhshU00shj”是一个推送,而不是我保留的字符串,这就是我面临的问题如果您没有保留密钥,您希望如何将精确的数据加载到数据库中?换句话说:您知道您试图加载的数据中有哪些独特的部分?如果你对此一无所知,你所能做的就是加载所有数据并显示出来。我正试图防止任何覆盖,因为“红色”、“棕色”、“黑色”只是一个例子,用户可以写入任何字符串,所以我认为推送在这种情况下会对我有所帮助,在“运动”下,我也希望每个项目(在本例中为袜子)都有一个唯一的ID,有没有什么步骤可以让我在不改变写入部分的情况下读取数据?它正在工作,我将致力于改进我的数据结构