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

倒计时结束调用FirebaseDatabase setValue时应用崩溃,同代码其他项目正常

问题分析与修复方案

从崩溃日志可以看到核心错误是java.lang.ClassCastException: java.text.SimpleDateFormat cannot be cast to java.lang.String,这是导致应用崩溃的直接原因。

错误根源

在setViews方法中,你明明已经将时间格式化为字符串savecurrentTime,但在往HashMap里存time字段时,错误地传入了SimpleDateFormat对象currentTime,而非格式化后的字符串。Firebase无法将SimpleDateFormat对象直接序列化为字符串,因此抛出类型转换异常。

修复后的代码片段

修改setViews方法中的HashMap赋值部分:

HashMap<String, Object> coinsadd = new HashMap<>();
coinsadd.put("currentuser", currentuserid);
coinsadd.put("coinsearn", cModel.one_user_cost);
coinsadd.put("date", savecurrentDate);
coinsadd.put("time", savecurrentTime); // 替换为格式化好的时间字符串
FirebaseDatabase.getInstance()
    .getReference()
    .child("UsedCompagin/" + "views")
    .child(cModel.userid)
    .child("user_view")
    .child(currentuserid)
.setValue(coinsadd);

额外建议

  1. 增加用户登录状态校验:获取currentuserid前先判断用户是否已登录,避免空指针崩溃:
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
if (currentUser == null) {
    // 处理未登录逻辑,比如跳转登录页面
    return;
}
String currentuserid = currentUser.getUid();
  1. 检查Firebase数据库规则:确保数据库规则允许当前用户写入目标节点,比如设置如下规则(根据实际需求调整):
{
  "rules": {
    "UsedCompagin": {
      "views": {
        "$userid": {
          "user_view": {
            "$currentUid": {
              ".write": "auth != null && auth.uid == $currentUid"
            }
          }
        }
      }
    }
  }
}
  1. 异常捕获:给Firebase操作添加onCancelled的错误处理,方便排查后续问题:
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
    Log.e("FirebaseError", "写入失败:" + databaseError.getMessage());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:15:33