Java 如何在Firebase中处理Android的异步运行

Java 如何在Firebase中处理Android的异步运行,java,android,firebase,arraylist,Java,Android,Firebase,Arraylist,我正在用firebase为android制作一个应用程序。我想做的是每个节点都有一个级别编号: User--- | ---> Jamse--- | | | ---> Level = 0 ---> Taylor--- | ----> Level = 1 我希望遍历每个节点并将级别号存储在ArrayLi

我正在用firebase为android制作一个应用程序。我想做的是每个节点都有一个级别编号:

User---
      |
      ---> Jamse---
      |           |
      |            ---> Level = 0
      ---> Taylor---
                  |
                  ----> Level = 1
我希望遍历每个节点并将级别号存储在ArrayList中。但问题是,我的ArrayList中填充了级别号,它只能存在于firebaseListener函数中。在函数外部,ArrayList为空。有谁能给我一个关于如何解决这个问题的建议吗

代码:

private ArrayList parentLevel;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u linked\u people\u tree);
LinearLayout linked=(LinearLayout)findViewById(R.id.linkedlayoutid);
mFirebaseAuth=FirebaseAuth.getInstance();
users=mFirebaseAuth.getCurrentUser();
mDatabaseReference=FirebaseDatabase.getInstance().getReference();
parentLevel=newarraylist();
mDatabaseReference.child(“用户”).child(Users.getUid()).addValueEventListener(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.child(“OriginalUser”).child(“Parents”).hasChildren()){
DataSnapshot parentSnapshot=DataSnapshot;
智力水平=0;
relatedParentNodeFinder(parentSnapshot,users.getUid(),level);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}

您必须等待Firebase运行

    // clear onDataChange 
    parentLevel.clear();
    int level = 0;
    // populate the list 
    relatedParentNodeFinder(parentSnapshot, users.getUid(), level);
    // Use the list here. Shouldn't be empty 
}

请注意,
级别
在节点查找器方法之后将为零

为什么要尝试在回调之外使用Arraylist?您的Arraylist肯定可以存在于侦听器之外。请添加您的代码我添加了codeparentLevel.add(level);将级别号添加到arraylist中,但当我尝试在主firebase侦听器之后访问它时,它会显示为一个emoty阵列。您实际在使用该列表吗?我更新代码,您可以看到箭头哦我明白您的意思。我将不得不继续使用onDataChange内部的arrayList OnlyUp,它确实是这样工作的。我想我得把它放在零钱里。谢谢您可以使用对象引用作为字段,但只需初始化回调中的数据,然后等待它被填充
    // clear onDataChange 
    parentLevel.clear();
    int level = 0;
    // populate the list 
    relatedParentNodeFinder(parentSnapshot, users.getUid(), level);
    // Use the list here. Shouldn't be empty 
}