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

Android项目两点间无法绘制路线,触发空指针异常求助

解决Android路线绘制中选择目的地的NullPointerException问题

嘿,刚入坑Android开发就踩这个空指针坑确实闹心,我来帮你拆解一下这个问题——你遇到的java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference,本质就是你在调用某个String的length()方法时,这个String变量压根是null,没拿到有效值或者没初始化。

结合你是选择目的地时触发的错误,大概率是目的地相关的字符串(比如地址、经纬度转的文本)没正确获取到,下面给你具体的排查和解决步骤:

1. 先定位具体的null变量

首先去看logcat的完整栈跟踪,找到具体是哪一行代码触发的错误。比如如果栈里显示是destinationAddress.length()报错,那就是destinationAddress这个变量是null。

  • 检查你获取目的地的逻辑:是搜索框输入的地址?还是地图选点拿到的位置?有没有判断用户是否真的完成了选择?比如用户可能没输入内容就点了“确定”,直接导致目的地字符串为null。

2. 给关键变量加非空检查

在使用任何可能为null的String变量之前,一定要先做非空判断,比如:

// 假设这是你获取目的地的方法
String destination = getSelectedDestination();
// 先判断是否为空或者空字符串
if (destination == null || destination.trim().isEmpty()) {
    Toast.makeText(this, "请先选择有效的目的地哦", Toast.LENGTH_SHORT).show();
    return; // 直接终止后续逻辑,避免报错
}
// 确认没问题再执行路线绘制
startDrawRoute(currentLocation, destination);

3. 检查网络请求的响应处理

从你给出的代码片段看,错误可能出在onResponse回调里——如果是调用地图API获取路线时出错,大概率是响应体为null,或者解析时某个字段没取到值:

@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
    // 先确保请求成功且响应体不为null
    if (response.isSuccessful() && response.body() != null) {
        String routeData = response.body();
        // 再去解析路线数据
        parseAndDrawRoute(routeData);
    } else {
        Log.e("RouteError", "请求失败或者返回的路线数据为空");
        Toast.makeText(this, "获取路线失败,请重试", Toast.LENGTH_SHORT).show();
    }
}

4. 验证目的地参数的传递逻辑

如果你是把目的地的经纬度(比如LatLng对象)转成字符串传递,要先确保LatLng不为null:

LatLng destinationLatLng = getSelectedMapPoint();
if (destinationLatLng == null) {
    Toast.makeText(this, "请在地图上选择目的地位置", Toast.LENGTH_SHORT).show();
    return;
}
// 转成字符串或者直接传递LatLng对象去绘制路线
drawRoute(currentLocation, destinationLatLng);

额外小技巧:用安全方式处理null

如果你的项目支持Java 8+,可以用Optional来更优雅地处理null:

Optional<String> optionalDest = Optional.ofNullable(getSelectedDestination());
optionalDest.ifPresent(dest -> {
    // 只有dest不为null时才执行这里的路线绘制逻辑
    drawRoute(currentLocation, dest);
});

先按照上面的步骤排查,重点盯栈跟踪里的报错行,找到那个“躺平”的null变量,针对性加判断就行。如果还有问题,可以把完整的报错栈和相关代码贴出来,我再帮你细化分析~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:34:59