私はアンドロイドのアプリケーションや何か奇妙発生しましたでfirebaseで働いた後、空になりますユーザーのキーを持つ文字列)と、もう一方はユーザーと比較するために、奇妙な振る舞いは、最初のスナップショットの後に私のarraylistが空であることを確認するためにlogcatを使用し、firstsnapshotのログは、 arraylist、2番目は私に0を返す、それは再び0になる方法を知らない。ここでArrayListのは、私の例では、私は(私はのArrayListのを埋めるために、このスナップショットを使用して、リスト内のユーザーを取得するには2つのスナップショット、1を必要とする最初のスナップショット
が私のコードです:それはなぜ起こるか私は、任意の先端を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();
}
私は、理解していませんか?
さて、私はあなたの応答をありがとうございました、しかし、事は、私はのonchangeの内側に私の2番目のリスナーを入れてみました2つのdiferent参照を必要とするので、私は、リスナー内でリスナーを実装することはできませんが、それが入ることはありません、問題を理解しますそこに:任意の提案? –
はい、ネストされた 'listeners'を使うことができます。各リスナーが特定の '参照 'を持つ限り、問題はありません。最後に、このようなあなたの 'onDestroy'方法で' listeners'削除することを忘れないでください: 'yourReference.removeEventListener(valueEventListenerを);' –
あなたは私が最初に内部の私の2番目の「myRef」コード」を置くことができる方法を例示することができます私はそれを試して、それは動作しません:/ –