Данные Firestore в Nested Recyclerview - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь получить данные из Firestore фрагментом. Моя функция onCreateView - это

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_order__subscription_0, container, false);
        recyclerView = (RecyclerView)rootView.findViewById(R.id.recycViewSubscription);
        linearLayoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(linearLayoutManager);

        /* Adding Customer Data in Recycler View from Firebase */

        final List<CustomerClass> itemList = new ArrayList<>();
        final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

        Log.d(TAG, user.getUid());

        CollectionReference users = db.collection("Users").document(user.getUid()).collection("Order_Subscription");
        users.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                Log.d(TAG, "DocumentSnapshot data: " + document.getData());

                                final Map<String, Object> m = document.getData();

                                /* Getting Subitem for the current Customer */

                                Log.d(TAG, document.getId().toString());
                                CollectionReference orders = db.collection("Users").document(user.getUid()).collection("Order_Subscription").document(document.getId().toString()).collection("OrdersByCustomer");
                                final List<CustProduct_Subclass> subItemList = new ArrayList<>();
                                orders.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {

                                            @Override
                                            public void onComplete(@NonNull Task<QuerySnapshot> subtask) {

                                                if (subtask.isSuccessful()) {
                                                    for (QueryDocumentSnapshot subdocument : subtask.getResult()) {
                                                        Log.d(TAG, "DocumentSnapshot Subdata: " + subdocument.getData());

                                                        Map<String, Object> n = subdocument.getData();


                                                        CustProduct_Subclass subItem = new CustProduct_Subclass(n.get("ProductName").toString(), n.get("Quantity").toString(), n.get("Amount").toString(), n.get("Description").toString(), n.get("Delivered").toString());
                                                        subItemList.add(subItem);
                                                        n.clear();
                                                    }


                                                    if (m.get("CustomerName") != null && m.get("Address") != null && m.get("Address") != null && m.get("MobileNumber") != null)
                                                    {
                                                        customerClass = new CustomerClass(m.get("CustomerName").toString(), m.get("Address").toString(), m.get("MobileNumber").toString(), subItemList);
                                                        Log.d(TAG, customerClass.toString());
                                                        itemList.add(customerClass);
                                                    }


                                                } else {
                                                    Log.d(TAG, "Error getting documents.", subtask.getException());
                                                }
                                            }
                                        });


                                /* Subitem part done*/

                                Log.d(TAG, "Finished Subtask");
                                m.clear();

                            }
                            itemAdapter = new ItemAdapter(itemList);
                            recyclerView.setAdapter(itemAdapter);
                            itemAdapter.notifyDataSetChanged();




                        } else {
                            Log.w(TAG, "Error getting documents.", task.getException());
                        }
                    }
                });
        return rootView;
    }

Моя база данных выглядит следующим образом. enter image description here enter image description here

Я не могу получить данные из базы данных. Это видно по логам. Но не в порядке, я знаю об асинхронной природе вызовов, но мой сценарий использования требует, чтобы я получил клиента и получил его / ее заказ, а затем перешел к следующему клиенту, чтобы сделать то же самое. Как я могу это сделать? Хорошо ли это / возможно ли вложение, или мне следует сменить модель? (заказы должны содержать идентификатор клиента)

...