Я пытаюсь получить данные из 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;
}
Моя база данных выглядит следующим образом.
Я не могу получить данные из базы данных. Это видно по логам. Но не в порядке, я знаю об асинхронной природе вызовов, но мой сценарий использования требует, чтобы я получил клиента и получил его / ее заказ, а затем перешел к следующему клиенту, чтобы сделать то же самое. Как я могу это сделать? Хорошо ли это / возможно ли вложение, или мне следует сменить модель? (заказы должны содержать идентификатор клиента)