Как получить конкретный список пользователей из базы данных Firebase в реальном времени, используя вложенные слушатели - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь получить список моих последних активных пользователей в моем приложении.Я храню их UID в виде строки в моей базе данных, как в базе данных:

lastActiveUsers:uid1 uid2 ... etc.

Теперь мне нужно показать список пользователей с UIds в этой строке, но при использовании вложенного прослушивателяЯ не знаю, как это сделать, это мой код:

это мой код:

    public void getStudents() {
    if (!list.isEmpty()) {
        list.clear();
    }
    lastActiveUsersReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String lastActiveUsers = (String) dataSnapshot.getValue();
            final String[] lastActiveUsersArray = lastActiveUsers.split(" ");
            for(final String userId : lastActiveUsersArray){
                usersReference.orderByKey().equalTo(userId).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        String localCurrentUserUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
                        for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                            User user = new User();
                            String points = "";
                            boolean admin = false, online = false;
                            String name = (String) dataSnapshot1.child("userName").getValue();
                            String email = (String) dataSnapshot1.child("userEmail").getValue();
                            String uid = dataSnapshot1.getKey();
                            if (dataSnapshot1.child("points").getValue() != null)
                                points = dataSnapshot1.child("points").getValue().toString();
                            String imageUrl = (String) dataSnapshot1.child("userImage").getValue();
                            String userType = (String) dataSnapshot1.child("userType").getValue();

                            if (dataSnapshot1.child("admin").getValue() != null)
                                admin = (boolean) dataSnapshot1.child("admin").getValue();

                            if (dataSnapshot1.child("online").getValue() != null) {
                                online = (boolean) dataSnapshot1.child("online").getValue();

                    /*if(online)
                        onlineUsersIndexes.add(list.size());//TODO : try to add this after solving its problem*/
                            }

                            int pointsInt;
                            try{
                                pointsInt = Integer.parseInt(points);
                            }
                            catch (Exception ex){
                                Log.v("pointsException", "exception is : " + ex);
                                pointsInt = 0;
                            }
                            Log.v("Sizee", "array size : " + lastActiveUsersArray.length
                                + " , userId : " + userId + " , array : " + lastActiveUsersArray.toString());
                            if (userType.equals("طالب") && !uid.equals(localCurrentUserUid) && !inList(userId) && !online && name != null) {//TODO : think about allowing challenges against teachers and others and ask my friends about thier opinions in that
                                user.setAdmin(admin);
                                user.setOnline(online);
                                user.setName(name);
                                user.setPoints(pointsInt);
                                user.setImageUrl(imageUrl);
                                user.setEmail(email);
                                user.setUid(uid);
                                list.add(user);
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            }
            Toast.makeText(ChallengersActivity.this, "list size is : " + list.size(), Toast.LENGTH_SHORT).show();
            recyclerAdapter.notifyDataSetChanged();

            if (progressBar.getVisibility() != View.GONE)
                progressBar.setVisibility(View.GONE);

            if (swipeRefreshLayout.isRefreshing()) {
                swipeRefreshLayout.setRefreshing(false);
            }

            if (list.size() == 0) {
                noStudentsTv.setVisibility(View.VISIBLE);
                noInternetConnectionText.setVisibility(View.GONE);
            } else {
                noStudentsTv.setVisibility(View.INVISIBLE);
                noInternetConnectionText.setVisibility(View.GONE);
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
...