我正在尝试制作一个事件排序应用程序。我试图从数据库中获取好友数组列表,并在数据库中的每个好友值下添加 event_key。
final ArrayList<String> friends= new ArrayList<String>();
hello.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
friends.add(String.valueOf(dsp.getKey()));
}
mDatabaseUserEvents.child(invited_list).child(event_key).setValue(true);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
但是,我收到一条错误消息,指出 ArrayList 不兼容。
我想要的数据库结构是这样的:
Events:
-User1:
-event_key:true
-User2:
-event_key:true
我很确定我需要使用 for 循环,但对如何实现它感到困惑。谢谢!
最佳答案
由于 Firebase 是一个 NoSQL 数据库,因此它的结构为键和值对。所以每个 child 都是一个Map
而不是一个ArrayList。确实,您可以从数据库获取值并将其存储到 ArrayList 中,但由于 onDataChange()
方法的异步行为,您的 friends
ArrayList 将始终为空。发生这种情况是因为在您尝试将这些值添加到该 ArrayList 之前就调用了 onDataChange()
方法。
如果您想为每个用户对应的所有 event_key
设置 true
并假设 Events
节点是 Firebase 的直接子节点 -数据库,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference eventsRef = rootRef.child("Events");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String userKey = ds.getKey();
Log.d("TAG", userKey);
eventsRef.child(userKey).child("event_key").setValue(true);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
eventsRef.addListenerForSingleValueEvent(eventListener);
关于java - Android-Firebase 如何在每个 ArrayList 值下分配一个子值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46316975/