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

Android调用Address.getShortAddress()报NullPointerException怎么解决

问题根因

你收到的NullPointerException是因为DashBoardActivity中监听地址LiveData的回调里,返回的Address对象为空,你直接调用了它的getShortAddress()方法导致崩溃。
对应报错位置的代码片段:

viewmodel.getAddressLiveData().observe(this, new Observer<Address>() {
    @Override
    public void onChanged(Address address) {
        location.setText(address.getShortAddress());
    }
});

LiveData返回的address为空属于常见场景,比如地址获取失败、定位权限未授予、定位服务未开启等情况,ViewModel都可能给LiveData设置空值,没有非空判断直接调用方法就会抛出空指针。


解决方法

你可以根据业务需求选择以下任意一种修复方案:

  • 方案1:添加基础非空判断,为空时展示默认提示
viewmodel.getAddressLiveData().observe(this, new Observer<Address>() {
    @Override
    public void onChanged(Address address) {
        if(address != null){
            location.setText(address.getShortAddress());
        }else{
            // 为空时显示自定义默认文案,也可在此处触发重新获取地址的逻辑
            location.setText("获取位置失败");
        }
    }
});
  • 方案2:如果项目支持Java 8及以上版本,可用Optional简化判空逻辑
viewmodel.getAddressLiveData().observe(this, new Observer<Address>() {
    @Override
    public void onChanged(Address address) {
        Optional.ofNullable(address)
            .map(Address::getShortAddress)
            .ifPresentOrElse(
                location::setText,
                () -> location.setText("获取位置失败")
            );
    }
});

额外优化建议

你可以同步检查ViewModel中fetchAddress方法的实现逻辑:

  1. 地址获取前先校验定位权限,没有权限时优先给用户弹出权限申请提示,而非直接返回空地址
  2. 地址获取失败的场景可添加重试逻辑,或者抛出明确的错误提示告知用户失败原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 00:06:04