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

Android跳转GoogleMap页面报Resources$NotFoundException异常

问题定位

这个崩溃和首页trovamico卡片的跳转逻辑本身没有关系,崩溃触发点是跳转后TrovamicoActivity加载Google Maps组件时,SDK内部调用getDimensionPixelSize方法找不到对应dimen类型资源。从报错栈可以明确,异常抛出在SupportMapFragment执行onCreateView的阶段,也就是地图视图初始化还没完成就崩了,和后续写的Firebase读取、marker添加逻辑无关。
核心触发原因是使用的play-services-maps:18.0.0版本存在资源兼容问题:如果Activity使用的主题没有继承AppCompat/MaterialComponents系列主题,或者项目R类索引缓存错乱,就会抛出Resource ID #0x7f070016 type #0x3 is not valid的异常,type 0x3对应的就是dimen尺寸资源类型。
另外贴出的Activity代码里还有几个会触发后续崩溃的隐患:

  • addresses和genders列表在打印日志之后才初始化,onCreate里执行Log打印时两个列表还是null,会直接触发空指针
  • Firebase数据读取是异步操作,在onCreate里直接调用getMapAsync,地图准备完成时Firebase数据大概率还没返回,onMapReady执行时addresses是空列表,后续数据返回后如果两个列表长度不匹配还会触发索引越界
  • 如果布局里没有声明id为map的SupportMapFragment,findFragmentById会返回null,后续调用getMapAsync也会空指针
修复方案

1. 解决Maps SDK资源找不到的核心崩溃

  • 升级Google Maps依赖版本,打开模块级build.gradle文件,把maps依赖替换为更高的稳定版本,替换后同步项目:
dependencies {
    // 替换原有的18.0.0版本
    implementation 'com.google.android.gms:play-services-maps:18.2.0'
    implementation 'com.google.android.gms:play-services-location:21.0.1'
}
  • 检查TrovamicoActivity使用的主题,确保Activity或Application的主题继承自Theme.MaterialComponents系列或者Theme.AppCompat系列主题,不要使用系统原生的非AppCompat主题,避免缺失SDK依赖的主题属性。
  • 清理项目缓存排除R类索引问题:在Android Studio中点击File -> Invalidate Caches...,勾选所有选项后重启IDE,之后依次执行Build -> Clean Project、Build -> Rebuild Project重新编译项目。

2. 修复代码逻辑隐患

  • 调整列表初始化顺序,把初始化逻辑移到使用列表之前,避免空指针:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = FragmentsTrovamicoBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
    // 先初始化列表再执行打印等使用操作
    addresses = new ArrayList<>();
    genders = new ArrayList<>();
    Log.d(TAG, "String addreess: " + addresses);

    // 原有Firebase初始化逻辑...
}
  • 调整地图加载时序,把getMapAsync调用、marker添加逻辑移到Firebase数据全部读取完成的回调里,避免异步加载导致的列表为空、索引不匹配问题。
  • 检查fragments_trovamico.xml布局文件,确认文件中存在id为map的SupportMapFragment声明,示例写法:
<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
  • 检查R.drawable.male、R.drawable.female两个资源,确认文件存放在通用的res/drawable目录下,没有放在仅适配高系统版本的资源目录中,避免低版本设备找不到资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:12:51