java - Android-Firebase 如何在每个 ArrayList 值下分配一个子值?

标签 java android arraylist firebase-realtime-database

我正在尝试制作一个事件排序应用程序。我试图从数据库中获取好友数组列表,并在数据库中的每个好友值下添加 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/

相关文章:

java - 如何在 firestore 中设置和覆盖整个数组列表

java - 如何在 int += double 上配置 Eclipse java 警告

android - 适用于 Android 和 iOS 的通用 App Store 均可私下访问

android - 有没有办法检查应用程序签名是否已调试或已发布?

java - 在 java 中从 arraylist 中查找丢失的项目

java - 删除后销毁所有实例

java - 为什么 Java 说我的变量没有初始化?

java - 如何删除 eclipse rcp 应用程序中不需要的菜单贡献?

java - 是否必须在 Activity 中编写 Alert Dialog 打开代码?

java - 移动 ArrayList 中的多个项目