You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore数据更新异常:同方法在不同类中更新失败问题排查

问题排查与解决方案

这问题我太熟悉了!核心坑点在于Firebase Firestore的异步操作执行顺序,咱们一步步拆解:

问题根源:异步回调的执行时机

你的代码里,userDocRef.get()是异步操作——它会在后台线程去拉取数据,而主线程会继续往下执行后面的更新代码。也就是说:

  • 后面的更新逻辑会先于onSuccess回调执行
  • 此时warmups_skipped还是初始值,根本没被currentUser.getWarmupsSkipped()+1修改
  • 日志显示“文档已保存”只是说明更新请求发送成功,但实际存的是旧值,所以云端看起来没变化

而你另一个类直接覆盖数据能成功,是因为那里不需要依赖异步获取的旧值,不存在顺序问题。

修复方案:把更新逻辑放到异步回调内部

确保只有在成功获取到最新用户数据、修改完本地变量后,再执行更新操作。修改后的代码如下:

FirebaseFirestore db = FirebaseFirestore.getInstance();
FirebaseUser currUser = FirebaseAuth.getInstance().getCurrentUser();
DocumentReference userDocRef = db.collection("Users").document(currUser.getEmail());

// 获取当前用户数据并更新本地变量,同时执行后续更新
userDocRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        User currentUser = documentSnapshot.toObject(User.class);
        int updatedWarmupsSkipped = currentUser.getWarmupsSkipped() + 1;
        Log.d(TAG, "DocumentSnapshot successfully retrieved! " + updatedWarmupsSkipped);

        // 把更新逻辑移到这里,确保用的是最新计算后的值
        Map<String, Object> update = new HashMap<>();
        update.put(WARMUPSSKIPPED, updatedWarmupsSkipped);
        userDocRef.set(update, SetOptions.merge())
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Log.d(TAG, "Document has been saved with updated value!");
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.e(TAG, "Document could not be saved", e); // 这里建议用Log.e,同时打印异常信息
                }
            });
    }
});

额外检查项

  1. 字段名一致性:确认WARMUPSSKIPPED常量的字符串值,和Firestore云端Users集合中文档的字段名完全一致(Firestore对大小写、拼写敏感)
  2. 异常日志优化:把更新失败的日志从Log.d改成Log.e,并打印e的详细信息,万一有权限或字段类型不匹配的问题,能快速定位

内容的提问来源于stack exchange,提问作者Vr33ni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:43:15