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

如何从MySQL传递LatLng到Google Maps?空指针异常排查求助

解决Google Maps LatLng创建时的NullPointerException问题

嘿,作为安卓新手遇到空指针异常确实挺闹心的,我来帮你拆解下问题根源和解决办法~

问题根源分析

从错误日志可以明确看到:

java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference

这说明你在onMapReady方法里创建LatLng时,bd_lat或者bd_lng是null值。因为LatLng的构造方法需要的是double基本类型,而你传入的是Double包装类,Java会自动把包装类拆箱成基本类型——如果包装类是null,拆箱操作就会抛出这个空指针异常。

那为什么bd_lat/bd_lng会是null呢?大概率是这两个原因:

  1. object.getString("latitude")或object.getString("longitude")返回了null(比如数据库里对应字段为空,或者字段名拼写错误,比如写成了lat而非latitude)
  2. 字符串解析成Double失败(比如返回的是空字符串"",或者非数字格式),但你的代码没有异常处理,导致变量保持null

分步解决方案

1. 先确保数据来源有效

首先在onCreate里检查object本身以及它返回的字符串值,建议加日志或者断点调试:

protected void onCreate(Bundle savedInstanceState) { 
    // 先检查object是否为null
    if (object == null) {
        Log.e("MapsTracker", "数据源object为null!");
        // 这里可以加处理逻辑,比如提示用户或关闭页面
        return;
    }
    // 打印获取到的经纬度字符串,排查是否为空或格式错误
    String latStr = object.getString("latitude");
    String lngStr = object.getString("longitude");
    Log.d("MapsTracker", "获取到的纬度:" + latStr + ",经度:" + lngStr);
    
    // 安全解析字符串为Double
    try {
        bd_lat = (latStr != null && !latStr.isEmpty()) ? Double.parseDouble(latStr) : null;
        bd_lng = (lngStr != null && !lngStr.isEmpty()) ? Double.parseDouble(lngStr) : null;
    } catch (NumberFormatException e) {
        Log.e("MapsTracker", "经纬度格式错误", e);
        // 解析失败时可以设置默认值,比如0.0,或者提示用户
        bd_lat = 0.0;
        bd_lng = 0.0;
    }
} 

2. 使用前检查变量是否为null

在onMapReady里创建LatLng之前,先判断bd_lat和bd_lng是否有效,避免空指针:

@Override 
public void onMapReady(GoogleMap googleMap) { 
    if (bd_lat != null && bd_lng != null) {
        LatLng Bello = new LatLng(bd_lat, bd_lng);
        // 这里可以继续添加地图标记、移动相机等操作
        googleMap.addMarker(new MarkerOptions().position(Bello).title("目标位置"));
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Bello, 15));
    } else {
        Log.e("MapsTracker", "经纬度数据无效,无法创建地图坐标");
        // 可以给用户弹个Toast提示
        Toast.makeText(this, "位置数据异常,请重试", Toast.LENGTH_SHORT).show();
    }
}

3. 额外排查点

  • 确认数据库里的字段名是否和你代码里的"latitude"、"longitude"完全一致(大小写敏感!)
  • 如果object是从其他页面通过Intent传递过来的,要确保传递时没有丢失,比如:
    // 传递方
    intent.putExtra("data_object", yourObject);
    // 接收方
    object = getIntent().getParcelableExtra("data_object");
    
    这里要检查接收后的object是否为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:33:42