Java:无序执行的方法语句

jus*_*men 0 java android

我有这种方法,我执行2个查询将数据放入2个列表,之后,我想验证列表的大小(用于调试目的).

方法:

postList = new ArrayList<>();
    Query query = postRef.orderByChild("timestamp");
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int k = 0;
            for (DataSnapshot ds : dataSnapshot.getChildren()){
                postList.add(ds.getValue(Post.class));
                Log.d("Display All Posts", postList.get(k).getTime());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


    followingList = new ArrayList<>();
    userRef.child(userId).child("following").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int k = 0;
            for (DataSnapshot ds: dataSnapshot.getChildren()){
                Log.d("Following",  "New user found:" + ds.getValue());
                followingList.add(ds.getValue(String.class));
                Log.d("FollowingList value", followingList.get(k));
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    Log.d("b1 and b2 ", "this is happening");
    Log.d("Post Size", String.valueOf(postList.size()));
    Log.d("following size", String.valueOf(followingList.size()));
}
Run Code Online (Sandbox Code Playgroud)

我确定红色框中的代码首先发生,然后是绿色箭头指向的查询,最后是黄线指向的查询.

我确定红色框中的代码首先发生,然后是绿色箭头指向的查询,最后是黄线指向的查询.

如何使框中的指令最后执行?

PS:我已经尝试将它放在另一个方法中,然后调用该方法,结果相同.

Sag*_*gar 6

它表现得像预期的那样.ValueEventListener.onDataChange是一个异步调用,将在其他某个时间点执行.它不会按顺序执行,因为您希望首先打印日志.移动这些日志onDataChange以确保根据您的需要执行.