0
我正在android應用程序中使用firebase併發生了一些奇怪的事情,在我的示例中,我需要兩個快照,1來獲取列表中的用戶(我使用這個快照來填充一個ArrayList字符串與用戶的關鍵字),另一個與用戶比較,奇怪的行爲是,我的arraylist在第一個快照後是空的,我用logcat來檢查它,並且firstsnapshot內的Log返回1作爲大小arraylist,第二個返回我0,不知道它是如何得到0。ArrayList在第一次快照後變空
這裏是我的代碼:
private void prepareFriendList() {
myRef.child(id).child("FriendLists").child(group).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String keyUser;
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Log.d("number:",snapshot.getKey());
keyUser = snapshot.getKey();
currentFriends.add(keyUser);
Log.d("hello",String.valueOf(currentFriends.size()));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
for(String s: currentFriends){
Log.d("idddd",s);
}
Log.d("hello",String.valueOf(currentFriends.size()));
myRef.child(id).child("Users").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
for(String item: currentFriends){
if (snapshot.getKey().equals(item)) {
usersList.add(user);
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mAdapter.notifyDataSetChanged();
}
我不明白,爲什麼出現這種情況,因爲我加入數組列表裏面的關鍵,任何提示?
那麼我明白這個問題謝謝你的迴應,但事情是我不能在一個監聽器中實現一個監聽器,因爲我需要2個不同的引用,我試圖把我的第二個監聽器放在onchange中,但它永遠不會進入有什麼建議嗎? –
是的,您可以使用嵌套的「偵聽器」。只要每個聽衆有一個特定的「參考」,就不會有問題。最後,不要忘記在'onDestroy'方法中刪除'listeners':'yourReference.removeEventListener(valueEventListener);' –
你能舉例說明如何將第二個'myRef'代碼放入第一個' myRef'代碼,因爲我試過了,它不起作用:/ –