java - 如何将 RecyclerView 中显示的数据与 Firebase 中的文档关联

标签 java android firebase google-cloud-firestore

我有以下情况,即:

我从数据库获取文档并将它们转换为对象:

代码:

private void getProductsFromDatabaseBreakfast() {

        breakfastProducts.clear();

        firebaseFirestore.collection("Users").document(currentUserUID)
                .collection("Types of Meals").document("Breakfast")
                .collection("Date of Breakfast").document(date)
                .collection("List of Products")
                .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {

                if(task.isSuccessful()) {

                    for(DocumentSnapshot documentSnapshot: task.getResult().getDocuments()) {

                        Log.i("id", documentSnapshot.getId());

                        breakfastProducts.add(documentSnapshot.toObject(Product.class));
                    }
                }

                if(getFragmentRefreshAdapter() != null) {

                    getFragmentRefreshAdapter().onRefresh();
                }
            }
        });
    }

结构:

Database

然后我在 RecyclerView 中显示产品:

enter image description here

说到优点,我希望用户能够更改产品的细节,以及精确的重量,这将自动更改其他值(卡路里、蛋白质等)。

因此,在单击给定项目 RecyclerView 后,我会转到用户可以对产品进行更改的 Activity 。如何将用户选择的给定产品与 CloudFirestore 中的相应产品关联起来?该更改也将发生在文档中。

我正在考虑增加产品 ID,然后我可以将产品与 ReyclerView 中的产品位置相关联,但我读到这不是一个好的做法,或者还有其他方法吗?

最佳答案

如果用户单击某个项目,则将名称发送到其他 Activity ,然后执行查询:

CollectionReference ref = firebaseFirestore.collection("Users").document(currentUserUID)
                .collection("Types of Meals").document("Breakfast")
                .collection("Date of Breakfast").document(date)
                .collection("List of Products");

ref.whereEqualTo("name", name).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if(task.isSuccessful()) {
                    for(DocumentSnapshot documentSnapshot: task.getResult().getDocuments()) {
                      Map<String, Object> data = new HashMap<>();
                        data.put("weight", 200);
                        ref.document(documentSnapshot.getId()).set(data, SetOptions.merge());
                    }
                }
            }
        });

使用查询 whereEqualTo 进行查询,将返回所有名称为 Chicken chest milknames,然后在任务成功后更新文档与用户输入的数据。

https://firebase.google.com/docs/firestore/query-data/queries

https://firebase.google.com/docs/firestore/manage-data/add-data#set_a_document

关于java - 如何将 RecyclerView 中显示的数据与 Firebase 中的文档关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173977/

相关文章:

java - 使用 MongoOperation 在 Spring Data MongoDB 中构建 ArrayFilters 更新

Java 比较器 - 函数访问

android - Mono for Android - 如何加速调试?

java - 在 Android 中录制声音时出错

firebase - 将依赖项添加到VScode中的gradle后无法同步

带有 Firebase 集成的 iOS Swift - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : 'Can' t add self as subview'

android - 有没有一种方法可以让每个 Firebase 项目显示 3 个以上的应用程序?

java - 无法解决eclipse中的 "Java heap space"错误

java - Java 中是否有 SQLite 的驱动程序?

android - 更新到 New Android Studio 3.2 后出现错误