Из каждого запроса я получаю информацию от 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 ().