我正在爲使用Firebase的android製作應用程序。我所試圖做的是,每一個節點都有一個級別號:如何在Firebase中處理Android的異步運行
User---
|
---> Jamse---
| |
| ---> Level = 0
---> Taylor---
|
----> Level = 1
我希望每個節點遍歷和存儲在ArrayList中的級別數量。但問題是,我的ArrayList填充了關卡號,只能在firebaseListener函數內部存在。在函數之外,ArrayList是空的。任何人都可以給我一個關於如何解決這個問題的建議嗎?
代碼:
private ArrayList<Integer> parentLevel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linked_people_tree);
LinearLayout linked = (LinearLayout) findViewById(R.id.linkedlayoutid);
mFirebaseAuth = FirebaseAuth.getInstance();
users = mFirebaseAuth.getCurrentUser();
mDatabaseReference = FirebaseDatabase.getInstance().getReference();
parentLevel = new ArrayList<Integer>();
mDatabaseReference.child("Users").child(users.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child("OriginalUser").child("Parents").hasChildren()) {
DataSnapshot parentSnapshot = dataSnapshot;
int level = 0;
relatedParentNodeFinder(parentSnapshot, users.getUid(), level);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
是查找最高級別的功能:
void relatedParentNodeFinder(DataSnapshot parentSnapshot, String userID, int level) {
if(userID.equals(users.getUid())) {
if (parentSnapshot.child("OriginalUser").child("Parents").exists()) {
mDatabaseReference.child("Users").child(users.getUid()).child("OriginalUser").child("Level").setValue(level);
level++;
for (DataSnapshot postSnapshot : parentSnapshot.child("OriginalUser").child("Parents").getChildren()) {
relatedParentNodeFinder(parentSnapshot, postSnapshot.getValue().toString(), level);
}
}
} else if(parentSnapshot.child("FamilyMembers").child(userID).child("Parents").exists()) {
if(parentSnapshot.child("FamilyMembers"). child(userID).child("Parents").exists()) {
mDatabaseReference.child("Users").child(users.getUid()).child("FamilyMembers")
.child(userID).child("Level").setValue(level);
level++;
for(DataSnapshot postSnapshot : parentSnapshot.child("FamilyMembers").child(userID).child("Parents").getChildren()) {
relatedParentNodeFinder(parentSnapshot, postSnapshot.getValue().toString(), level);
}
}
} else { //Has the Key of the Top Parent Nodes
mDatabaseReference.child("Users").child(users.getUid()).child("FamilyMembers")
.child(userID).child("Level").setValue(level);
//------> parentLevel.add(level); //THIS IS THE ARRAYLIST. I CANT MAKE IT WORK OUTSIDE OF THE LISTENER
topDownChildNodeFinder(parentSnapshot, userID, level);
}
}
你爲什麼試圖在回調之外使用Arraylist?您的Arraylist絕對可以存在於聽衆之外。請添加您的代碼 –
我添加了代碼 –
parentLevel.add(level);將等級號碼添加到數組列表中,但是當我試圖在主數據庫中的Firebase偵聽器之後訪問它時,它會將其顯示爲一個數組列表 –