Получить конкретного ребенка из базы данных Firebase Realtime в RecyclerView - Android - PullRequest
0 голосов
/ 31 октября 2019

Я совершенно новичок в мире Firebase и Android. Я хочу получить только определенные группы, в которые вошел текущий вошедший в систему пользователь.

Вот моя структура базы данных Firebase в реальном времени

Однако,все пользователи, которые вошли в систему, отображаются со всеми группами, существующими в базе данных:

Снимок экрана моего приложения

Я попытался отфильтровать выводвнутри onBindViewHolder метода FirebaseRecylerAdapter, но, похоже, он не работает:

protected void onBindViewHolder(@NonNull final GroupChatViewHolder holder, final int position, @NonNull Group model) {

    final String groups = getRef(position).getKey();

    final String retGroupName = groups.toString();

    RootRef.child("Groups").child(retGroupName).child("Users").child(currentUser.getUid())
        .addValueEventListener(new ValueEventListener() {
        @Override
        // If current user exist in that group
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            holder.txtGroupName.setText(retGroupName);

            //  Retrieve groupCreatedBy
            RootRef.child("Groups").child(retGroupName).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    String retGroupCreatedBy = dataSnapshot.child("groupCreatedBy").getValue().toString();

                    //  Find username of the group creator
                    RootRef.child("Users").child(retGroupCreatedBy).child("profilename")
                        .addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                                holder.txtGroupCreatedBy.setText("Group created by: " + dataSnapshot.getValue().toString());
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {

                            }
                        });
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
        });
}

Вот мои полные коды. Я реализую весь процесс, включая onBindViewHolder, в классе фрагмента, как показано ниже:

public class GroupChatFragment extends Fragment {

    private View view;
    private RecyclerView chatList;

    FirebaseAuth mAuth = FirebaseAuth.getInstance();
    FirebaseUser currentUser = mAuth.getCurrentUser();
    DatabaseReference RootRef = FirebaseDatabase.getInstance().getReference();

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_group_chat, container, false);

        chatList = (RecyclerView) view.findViewById(R.id.group_chat_list);
        chatList.setLayoutManager(new LinearLayoutManager(getContext()));

        Toolbar toolbar = view.findViewById(R.id.toolbar_chat);
        ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);

        return view;
    }

    @Override
    public void onStart() {
        super.onStart();

        FirebaseRecyclerOptions<Group> options = new FirebaseRecyclerOptions.Builder<Group>()
                .setQuery(RootRef.child("Groups"), Group.class)
                .build();

        FirebaseRecyclerAdapter<Group, GroupChatViewHolder> adapter =
                new FirebaseRecyclerAdapter<Group, GroupChatViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull final GroupChatViewHolder holder, final int position, @NonNull Group model) {
...
}
        };

        chatList.setAdapter(adapter);
        adapter.startListening();
    }

    public static class GroupChatViewHolder extends RecyclerView.ViewHolder {

        TextView txtGroupName, txtGroupCreatedBy;

        public GroupChatViewHolder(@NonNull View itemView) {
            super(itemView);

            txtGroupName = itemView.findViewById(R.id.group_name_display);
            txtGroupCreatedBy = itemView.findViewById(R.id.group_createdby_display);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...