Java Firebase addValueEventListener是否异步工作?
我正在开发一个聊天应用程序,但当涉及到查看用户的好友请求时,我面临的问题是 当我记录Firebase的查询时,为什么它没有按代码正确排序 这是我的代码:Java Firebase addValueEventListener是否异步工作?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在开发一个聊天应用程序,但当涉及到查看用户的好友请求时,我面临的问题是 当我记录Firebase的查询时,为什么它没有按代码正确排序 这是我的代码: // Query for pending requests in the current user Log.v("AAAAAA", "AAAAAA"); usersRef.child(MainActivity.currentUser.getUid()).child("inpendingfriendreq").addValueE
// Query for pending requests in the current user
Log.v("AAAAAA", "AAAAAA");
usersRef.child(MainActivity.currentUser.getUid()).child("inpendingfriendreq").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) { // dataSnapShot = inpendingfriendreq node
for (DataSnapshot reqDataSnapShot : dataSnapshot.getChildren()) {
U = reqDataSnapShot;
Log.v("BBBBBBBB", U.toString());
usersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot sDataSnapshot) { // sDataSnapshot = "users" node DataSnapShot
for (DataSnapshot searchForPendingUserDS : sDataSnapshot.getChildren()) { // searchForPendingUserDS = a user from database (child node of "users" node)
Log.v("CCCCCCC", searchForPendingUserDS.toString());
if (searchForPendingUserDS.getKey().equals(U.getKey())) { // If that user's id equals pending req id
MainActivity.reqArrList.add(new FriendRequest(R.drawable.default_pp, searchForPendingUserDS.child("name").getValue(String.class)));
Log.v("DDDDDDDDD", searchForPendingUserDS.child("name").getValue(String.class));
}
}
Log.v("EEEEEEEE", MainActivity.reqArrList.toString());
//requestsPageUpdated();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(mContext, "Error querying", Toast.LENGTH_SHORT).show();
}
});
//requestsPageUpdated();
Log.v("FFFFFFFFFF", "FFFFFFFFF");
break;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(mContext, "Error querying", Toast.LENGTH_SHORT).show();
}
});
应该是:
AAAAAA
BBBBBB
CCCCCC
DDDDDD
CCCCCC
CCCCCC
CCCCCC
EEEEEE
FFFFFF
GGGGGG
但它显示在Logcat中:
AAAAAA
GGGGGG
BBBBBB
FFFFFF
CCCCCC
DDDDDD
CCCCCC
CCCCCC
CCCCCC
EEEEEE
我知道事件侦听器是异步的,但这是什么意思?
Async是指函数像Button onClickListener一样等待被触发,还是说当它被触发时,它与主线程并行运行?所以在第二种情况下,这对我的问题是有意义的。
请帮忙 异步意味着它并行运行。检查一下,谢谢!所以,我现在的问题是,我如何将这个顺序安排为上面的代码应该同步的正确顺序?签出。异步意味着它并行运行。检查一下,谢谢!所以,我现在的问题是,我如何安排这个顺序,以正确的顺序,上面的代码应该是同步的。