java - 如何将 RecyclerView 中显示的数据与 Firebase 中的文档相关联
问题描述
我有以下情况,即:
我从数据库中获取文档并将它们转换为对象:
代码:
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();
}
}
});
}
结构:
然后我在 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());
}
}
}
});
使用查询whereEqualTo
查询将返回所有names
名称Chicken breast meat
,然后在任务成功后使用用户输入的数据更新文档。
https://firebase.google.com/docs/firestore/query-data/queries
https://firebase.google.com/docs/firestore/manage-data/add-data#set_a_document
推荐阅读
- python - 隐藏的硒浏览器py
- android - 在 AVD 中运行 android 应用程序时发生未知异常
- ios - Xamarin 表单中是否有相当于 iOS 的动态系统颜色?
- python - 如何在 matplotlib 中制作抛物线?
- autodesk-forge - 使用 Inventor 插件从 IDW 文件导出为 SVF 格式
- wordpress - 无法激活 PixelYourSite 插件,因为它会触发致命错误
- azure-functions - 从 azure 函数有条件地插入 Cosmos DB
- javascript - 文件(PDF、JPG、PNG)下载而不是在新标签中打开
- java - Spring AuthenticationManager 和循环依赖
- nuget - Nuget Sitefinity 存储库关闭?