从某个孩子那里获取Firebase数据

时间:2017-11-12 19:49:24

标签: android firebase firebase-realtime-database

我开始使用数据库连接编写Android应用程序代码。作为IDE,我使用Android Studio和Firebase作为数据库。这是我在Firebase中的数据结构: enter image description here

在我的应用中,我需要填写=>所有名称。所以我想要来自孩子的三个孩子的数据" Rezepte"来自UUID的孩子。我希望这是可以理解的。

我已经完成了很多谷歌搜索,但我无法弄清楚它是如何工作的。我当前版本的java代码是这样的:

ListView

应用程序总是崩溃,我在调试器中并不是很了解。但错误发生在final FirebaseUser user = firebaseAuth.getCurrentUser(); // trying to get the reference of the right path DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(user.getUid()).child("Rezepte"); ref.addListenerForSingleValueEvent( new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // calling a method which should read the data from the snapshot and put it into the ListView fillList((Map<String, Object>) dataSnapshot.child(user.getUid()).child("Rezepte").getValue()); } @Override public void onCancelled(DatabaseError databaseError) { Toast.makeText(RezepteActivity.this, "Daten konnten nicht gelesen werden", Toast.LENGTH_SHORT).show(); } }); } private void fillList(Map<String, Object> entries) { // loop to cycle through every child of "Rezepte" and get the names for (Map.Entry<String, Object> entry : entries.entrySet()) { Map singleEntry = (Map) entry.getValue(); // add the name to an ArrayList of all names Rezepte.add((String) singleEntry.get("name")); } // put the data into the ListView lvRezepte.addFooterView(lvRezepte, Rezepte, true); } void。

如果有人可以帮助我,我会很高兴。

3 个答案:

答案 0 :(得分:0)

当您在查询中已经完成此操作时,您正试图遍历结果DataSnapshot中的层次结构。所以在你的onDataChange()中你只需要输入:

fillList(datasnapshot.getValue()) //Map of results at /{uid}/Rezepte

答案 1 :(得分:0)

假设fillList方法正常工作,您应首先修复以下行

fillList((Map<String, Object>) dataSnapshot.child(user.getUid()).child("Rezepte").getValue())

fillList((Map<String, Object>) dataSnapshot.getValue())

当你声明它时,你已经引用了当前用户的Rezepte子节点: DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(user.getUid()).child("Rezepte")

您的快照有123作为子项,因此您不应该强化您在参考中声明的路径。

答案 2 :(得分:0)

要获取所有这些名称并将其添加到ArrayList,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference rezepeteRef = rootRef.child(user.getUid()).child("Rezepte");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            list.add(name);
            Log.d("TAG", name);
        }
        Log.d("TAG", list);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
rezepeteRef.addListenerForSingleValueEvent(eventListener);