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

Firebase实时数据库未保存数据:添加LatLng非空判断后写入失败

问题排查步骤

  • 首先确认if判断是否真的执行
    你的代码加入非空判断后没有执行写入,大概率是pickupLatLng或destinationLatLng在代码执行到此处时为null,直接跳过了代码块。你可以在if判断前插入日志确认变量状态:
    Log.d("CHECK_NULL", "pickup是否为空: " + (pickupLatLng == null) + " | destination是否为空: " + (destinationLatLng == null));
    if (pickupLatLng != null && destinationLatLng != null) {
        // 原有逻辑
    }
    
    要是打印结果有任意一个为true,你需要检查这两个变量的赋值时机,确保在触发数据库写入前,已经完成了定位、目的地选点的赋值操作。
  • 检查代码块内的变量是否有非法值
    rideDistance如果未初始化、值为null的话,Firebase实时数据库不支持写入null值,会触发写入失败。你可以同样加日志确认rideDistance是否有合法值。
  • 补全完成回调的错误打印
    你之前加完成回调没效果大概率是没打印错误信息,修改回调逻辑如下:
    historyRef.child(requestId).updateChildren(map, new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError error, DatabaseReference ref) {
            if (error != null) {
                Log.e("FIREBASE_ERR", "写入失败原因:" + error.getMessage());
            } else {
                Log.d("FIREBASE_SUCCESS", "写入成功");
            }
        }
    });
    
    所有写入失败的原因都会在error日志中明确展示,比如权限不足、数据格式非法等。
  • 检查数据库规则权限
    确认你的实时数据库规则是否开放了location、distance字段的写入权限,很多人只会配置基础字段的写入权限,新增字段后没有更新规则会被拦截写入。
  • 替换路径写法测试
    你用斜杠分隔的路径写法本身是支持的,但可以替换为嵌套HashMap的写法避免路径解析异常:
    HashMap<String, Object> fromLoc = new HashMap<>();
    fromLoc.put("lat", pickupLatLng.latitude);
    fromLoc.put("lng", pickupLatLng.longitude);
    HashMap<String, Object> toLoc = new HashMap<>();
    toLoc.put("lat", destinationLatLng.latitude);
    toLoc.put("lng", destinationLatLng.longitude);
    HashMap<String, Object> locationMap = new HashMap<>();
    locationMap.put("from", fromLoc);
    locationMap.put("to", toLoc);
    map.put("location", locationMap);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:54:04