Документы базы данных Firestore не отображаются в RecyclerView - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь отобразить документы из моей базы данных Firestore в элементах CardView в RecyclerView. Я последовал руководству по этому поводу, настроил адаптер и все такое. Однако, когда я запускаю приложение, на экране не отображаются никакие элементы. Я реализую его во фрагменте, а не в действии, но не уверен, почему это имеет значение. Может ли кто-нибудь увидеть, где я ошибся? В базе данных определенно есть данные, которые должны появиться

Код фрагмента

public class GroupsFragment extends Fragment {

    //Declare the database object
    private FirebaseFirestore database;
    CollectionReference reference;

    private MainActivity mainActivity;
    private GroupAdapter adapter;

    private RecyclerView rcGroups;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mainActivity = (MainActivity) getActivity();
        database = mainActivity.database;

        View view =  inflater.inflate(R.layout.fragment_groups, container, false);
        rcGroups = view.findViewById(R.id.rcGroups);

        reference = database.collection("groups");

        setUpRecyclerView();

        return inflater.inflate(R.layout.fragment_groups, container, false);
    }

    private void setUpRecyclerView() {
        Query query = reference.whereEqualTo("members", mainActivity.UID);

        FirestoreRecyclerOptions<Group> options = new FirestoreRecyclerOptions.Builder<Group>()
                .setQuery(query, Group.class)
                .build();

        adapter = new GroupAdapter(options);

        //rcGroups.setHasFixedSize(true);
        rcGroups.setLayoutManager(new LinearLayoutManager(getContext()));
        rcGroups.setAdapter(adapter);
    }

    @Override
    public void onStart() {
        super.onStart();
        adapter.startListening();
    }

    @Override
    public void onStop() {
        super.onStop();
        adapter.stopListening();
    }
}

Код адаптера

public class GroupAdapter extends FirestoreRecyclerAdapter<Group, GroupAdapter.GroupHolder> {

    /**
     * Create a new RecyclerView adapter that listens to a Firestore Query.  See {@link
     * FirestoreRecyclerOptions} for configuration options.
     *
     * @param options
     */
    public GroupAdapter(@NonNull FirestoreRecyclerOptions<Group> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull GroupHolder holder, int position, @NonNull Group model) {
        holder.txtID.setText(model.getID());
    }

    @NonNull
    @Override
    public GroupHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_item,
                parent, false);
        return new GroupHolder(v);
    }

    class GroupHolder extends RecyclerView.ViewHolder {
        TextView txtID;

        public GroupHolder(@NonNull View itemView) {
            super(itemView);
            txtID = itemView.findViewById(R.id.txtID);
        }
    }
}

Групповой класс

public class Group {
    private String id;

    public Group() {
        //Empty constructor needed
    }

    public Group(String id) {
        this.id = id;
    }

    @PropertyName("id")
    public String getId() {
        return id;
    }
}

Структура базы данных

Groups Database Structure

Работающий запрос

database.collection("groups")
            .whereEqualTo("members", mainActivity.UID)
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            Log.d("RESULT", document.getId() + " => " + document.getData());
                        }
                    }
                    else {
                        Log.d("FAIL", "Error getting documents: ", task.getException());
                    }
                }
            });
...