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());
}
}
}
});