Java:无序执行的方法语句

时间:2018-05-14 05:57:24

标签: 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()));
}

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

I Know for sure that the code in the Red box is happening first, followed by the query pointed by the green arrow and lastly the query pointed by the yellow line.

问题

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

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

1 个答案:

答案 0 :(得分:6)

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