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