使用FirebaseFirestore查询获取数据后如何将修改后的数据更新回数据库
问题原因与修复方案
核心错误点
- 错误调用文档引用方法:
doc.getDocumentReference("monthCounter")是错误写法,该方法传入字符串参数时是获取当前文档下的子文档引用,而非当前文档本身的引用,无法定位到要更新的目标文档自然会更新失败,获取当前文档引用直接调用doc.getReference()即可。 - 字段类型逻辑错误:你把
monthCounter作为字符串读取,直接执行+1操作会变成字符串拼接而非数值累加,比如原字段值为2,拼接后会变成21而非3,如果数据库中该字段本身是数值类型,还会因为类型不匹配导致更新失败。 - 缺少异常校验逻辑:你没有对
onEvent回调的error、value参数做非空校验,出现异常时无法定位具体问题。
修正后的代码
Query query = FirebaseFirestore.getInstance().collection("Users").whereEqualTo("VendorName",Vendorname); int finalMonth = month; query.addSnapshotListener(new EventListener<QuerySnapshot>() { @Override public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) { // 先校验异常与查询结果 if (error != null) { Log.e("FirebaseError", "数据监听失败", error); return; } if (value == null || value.isEmpty()) { Log.d("FirebaseData", "未查询到匹配文档"); return; } for (DocumentSnapshot doc : value) { // 若字段本身是数值类型直接读Long转int即可,若确实存的字符串可先调用Integer.parseInt转换 Integer monthCounter = doc.getLong("monthCounter").intValue(); Log.d("monthCounter", String.valueOf(monthCounter)); if(finalMonth == 1){ monthCounter = monthCounter + 1; // 用当前文档引用更新对应字段,添加监听排查问题 doc.getReference().update("monthCounter", monthCounter) .addOnSuccessListener(aVoid -> Log.d("UpdateSuccess", "字段更新成功")) .addOnFailureListener(e -> Log.e("UpdateFail", "字段更新失败", e)); } } } });
补充注意事项
- 如果
monthCounter是计数专用字段,建议直接存为数值类型,无需转字符串处理,避免不必要的类型转换错误。 - 所有Firebase操作都建议添加完成回调,可快速定位操作失败的具体原因。
内容的提问来源于stack exchange,提问作者androidnewbie
相关产品推荐
相关产品推荐

