Как я уже сказал в комментарии, вы не можете вызвать get()
для объекта FirebaseFirestore
, потому что в этом классе нет такого метода. Однако CollectionReference , расширяющий класс Query , содержит этот метод.
Согласно вашему комментарию:
объект сумки и объект обуви являются то же самое.
Самое простое решение, о котором я могу подумать, - это создать единую коллекцию с именем products и добавить в нее все продукты. Вот как должна выглядеть ваша схема:
Firestore-root
|
--- products (collection)
|
--- productId (document)
| |
| --- name: "Bag1"
| |
| --- type: "bag"
|
--- productId (document)
|
--- name: "Shoe1"
|
--- type: "shoe"
Если вы хотите получить все продукты, просто воспользуйтесь следующей ссылкой и добавьте прикрепленный слушатель:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference productsRef = rootRef.collection("products");
productsRef.get().addOnCompleteListener(/* ... */);
Сейчас Вы можете позвонить get()
на этот productsRef
объект.
Если вам нужны, например, только сумки, то вам следует использовать следующий запрос:
Query query = productsRef.whereEqualTo("type", "bag");
query.get().addOnCompleteListener(/* ... */);
Все вы Нужно просто добавить новое свойство в каждый документ продукта. Вот и все.
Редактировать:
Чтобы составить список типов продуктов, просто создайте документ со свойством массива типов и добавьте все типы продуктов.
Firestore-root
|
--- data (collection)
|
--- types (document)
|
--- productTypes: ["bags", "shoes", "t-shirts"]
Получить значения этого массива и добавить их в список. Теперь, когда кто-то нажимает на тип, создайте запрос следующим образом:
String selectedType = type.substring(0, s.length() - 1)
Query query = productsRef.whereEqualTo("type", selectedType);
Я использовал type.substring(0, s.length() - 1)
, чтобы вырезать s
в конце слова.
Edit2:
Честно говоря, я не вижу причин, по которым вам не следует использовать вышеупомянутое решение , но проверьте ниже другой подход.
Firestore-root
|
--- root (collection)
|
--- bags (document)
| |
| --- products (collection)
| |
| --- bagIdOne
| |
| --- name: "Bag1"
|
--- shoes (document)
|
--- products (collection)
|
--- shoeIdOne
|
--- name: "Shoe1"
В этом случае вы не можете использовать простой запрос, вам нужно использовать запрос группы сбора .
db.collectionGroup("products")
.whereEqualTo("type", selectedType)
.get()
.addOnCompleteListener(/* ... */);
. Для отображения типов продуктов используйте следующий код:
productsRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId());
}
}
}
});
Результат в вашем логате будет:
bags
shoes
t-shirts