Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将RecyclerView中显示的数据与Firebase中的文档关联_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

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

Java 如何将RecyclerView中显示的数据与Firebase中的文档关联,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我有以下情况,即: 我从数据库获取文档并将其转换为对象: 代码: private void GetProductsFromDatabaseBreaken(){ 早餐产品; firebaseFirestore.collection(“用户”).document(currentUserUID) .收集(“膳食类型”).文件(“早餐”) .收集(“早餐日期”).文件(日期) .收集(“产品清单”) .get().addOnCompleteListener(新的OnCompleteListener())

我有以下情况,即:

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

代码:

private void GetProductsFromDatabaseBreaken(){
早餐产品;
firebaseFirestore.collection(“用户”).document(currentUserUID)
.收集(“膳食类型”).文件(“早餐”)
.收集(“早餐日期”).文件(日期)
.收集(“产品清单”)
.get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(DocumentSnapshot DocumentSnapshot:task.getResult().getDocuments()){
Log.i(“id”,documentSnapshot.getId());
添加(documentSnapshot.toObject(Product.class));
}
}
if(getFragmentRefreshAdapter()!=null){
getFragmentRefreshAdapter().onRefresh();
}
}
});
}
结构:

然后我在RecyclerView中显示产品:

说到优点,我希望用户能够改变产品的细节,准确地说是它的重量,这将自动改变其他值​​(卡路里、蛋白质等)

因此,在单击给定的项目RecyclerView后,我进入一个活动,用户可以在其中对产品进行更改。如何将用户选择的给定产品与CloudFirestore中的相应产品相关联?文件中也会发生这种变化


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

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

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());
                    }
                }
            }
        });
collectionreferef=firebaseFirestore.collection(“用户”).document(currentUserUID)
.收集(“膳食类型”).文件(“早餐”)
.收集(“早餐日期”).文件(日期)
.收集(“产品清单”);
ref.whereEqualTo(“name”,name).get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(DocumentSnapshot DocumentSnapshot:task.getResult().getDocuments()){
映射数据=新的HashMap();
数据。放置(“重量”,200);
ref.document(documentSnapshot.getId()).set(data,SetOptions.merge());
}
}
}
});
使用查询
whereEqualTo
来查询将返回名称为
鸡胸肉的所有
名称
,然后在任务成功后使用用户输入的数据更新文档


您构建了一个方法来检索数据,然后在文本更改时调用它,然后从数据库中调用数据谢谢您的回复!我正在考虑这样的解决方案,但有一个缺点。。。也就是说,如果用户为给定的一餐输入两种同名产品。例如,鸡胸脯将有两次午餐,这两种价值观​​将被修改。然后为每个文档添加一个唯一字段,并在ITI上进行查询。如果答案对您有所帮助,请对其进行升级投票并将其标记为正确,以便其他用户知道它很有帮助,谢谢!
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());
                    }
                }
            }
        });