如何从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呢?大概率是这两个原因:
object.getString("latitude")或object.getString("longitude")返回了null(比如数据库里对应字段为空,或者字段名拼写错误,比如写成了lat而非latitude)- 字符串解析成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
相关产品推荐
相关产品推荐

