我开始使用数据库连接编写Android应用程序代码。作为IDE,我使用Android Studio和Firebase作为数据库。这是我在Firebase中的数据结构:
在我的应用中,我需要填写=>
所有名称。所以我想要来自孩子的三个孩子的数据" 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。
如果有人可以帮助我,我会很高兴。
答案 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")
您的快照有1
,2
和3
作为子项,因此您不应该强化您在参考中声明的路径。
答案 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);