Запрос Firebase не работает правильно, если он зависит от размера ArrayList () - PullRequest
0 голосов
/ 16 июня 2019

Из каждого запроса я получаю информацию от 1 пользователя.Здесь 3 запроса.Последние 2 запроса зависят от размера списка, полученного из предыдущего запроса.Но каждый запрос приводит к получению 1 пользователя в списке, хотя есть 3 пользователя, которые будут показаны, и переходит к следующему способу, хотя он был ограничен.

Я ограничен использованием переменной count, но он также делаетне работа.Подобное ограничение просто помещает 1 пользователя в ArrayList и затем переходит к следующему методу, как в предыдущем сценарии.

public class FriendsLeaderboardFragment extends Fragment {

private ListView listView;
private ArrayList<Leaderboard> mLeaderboardList;
private ArrayList<String> mFollowing;
private ArrayList<UserPublicInfo> mUserPublicInfoList;
private int pos;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_friends_leaderboard, container, false);
    Log.d("TAG","FriendsLeaderboardFragment");
    listView = (ListView) view.findViewById(R.id.listView);
    mLeaderboardList = new ArrayList<>();
    mFollowing = new ArrayList<>();
    mUserPublicInfoList = new ArrayList<>();

    getInfo();

    return view;
}

private void getInfo() {
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    Query query = reference
            .child("following")
            .child(FirebaseAuth.getInstance().getCurrentUser().getUid());
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
                mFollowing.add(singleSnapshot.child("user_id").getValue().toString());
            }
            mFollowing.add(FirebaseAuth.getInstance().getCurrentUser().getUid());
            Log.d("getInfo",mFollowing.toString());
            getUserInfo();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

private void getUserInfo() {
    //get the profile image and username
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    for(int i=0; i<mFollowing.size(); i++){
        final int count = i;
            Query query = reference
                    .child("User Public Info")
                    .orderByChild("user_id")
                    .equalTo(mFollowing.get(i));
            query.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
                        Log.d("TAG", "onDataChange: found user: "
                                + singleSnapshot.getValue(UserPublicInfo.class).getUsername());
                        UserPublicInfo userPublicInfo = new UserPublicInfo();
                        userPublicInfo.setFollowing(singleSnapshot.getValue(UserPublicInfo.class).getFollowing());
                        userPublicInfo.setHometown(singleSnapshot.getValue(UserPublicInfo.class).getHometown());
                        userPublicInfo.setLongitude(singleSnapshot.getValue(UserPublicInfo.class).getLongitude());
                        userPublicInfo.setUsername(singleSnapshot.getValue(UserPublicInfo.class).getUsername());
                        userPublicInfo.setNumber_of_travelled_places(singleSnapshot.getValue(UserPublicInfo.class).getNumber_of_travelled_places());
                        userPublicInfo.setProfile_photo(singleSnapshot.getValue(UserPublicInfo.class).getProfile_photo());
                        userPublicInfo.setFollowers(singleSnapshot.getValue(UserPublicInfo.class).getFollowers());
                        userPublicInfo.setLatitude(singleSnapshot.getValue(UserPublicInfo.class).getLatitude());
                        userPublicInfo.setPosts(singleSnapshot.getValue(UserPublicInfo.class).getPosts());
                        userPublicInfo.setUser_id(singleSnapshot.getValue(UserPublicInfo.class).getUser_id());
                        mUserPublicInfoList.add(userPublicInfo);
                    }
                    if (count >= mFollowing.size() - 1){
                        Log.d("getUserInfo",mUserPublicInfoList.toString());
                        getPointCount();
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
}

private void getPointCount() {
    Log.d("getPointCount",mUserPublicInfoList.toString());

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();

    for(int i=0; i<mUserPublicInfoList.size(); i++){
            Query query = reference
                    .child("User Photos")
                    .child(mUserPublicInfoList.get(i).getUser_id())
                    .child("Uploaded");
            final int count = i;
            pos = i;

            query.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    List<Like> likesList = new ArrayList<Like>();
                    for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
                        for (DataSnapshot dSnapshot : singleSnapshot
                                .child("likes").getChildren()){
                            Like like = new Like();
                            like.setUser_id(dSnapshot.getValue(Like.class).getUser_id());
                            likesList.add(like);
                        }
                    }
                    if (count >= mUserPublicInfoList.size() - 1){
                        inflateView();
                    }
                    else{
                        int size = likesList.size();
                        Leaderboard leaderboard = new Leaderboard();
                        leaderboard.setUsername(mUserPublicInfoList.get(pos).getUsername());
                        leaderboard.setProfile_photo(mUserPublicInfoList.get(pos).getProfile_photo());
                        leaderboard.setUser_id(mUserPublicInfoList.get(pos).getUser_id());
                        leaderboard.setPoints(String.valueOf(size));
                        mLeaderboardList.add(leaderboard);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
}

private void inflateView() {
    Log.d("getPointCount",mUserPublicInfoList.toString());
    listView.setAdapter(new LeaderboardItemAdapter(getActivity(),R.layout.fragment_friends_leaderboard,mLeaderboardList));
}
}

Я ожидаю, что каждый запрос приведет к получению всего списка, а затем перейдет к следующему методу какпоследние 2 запроса зависят от предыдущего размера ArrayList ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...