Google Maps API自定义标记失效及crimeStatus变量告警修复咨询
问题修复方案
1. 解决「crimeStatus从未使用」告警及状态值未初始化问题
问题根源
- CrimeData构造函数未接收并初始化
crimeStatus成员变量,导致对象内的状态值始终为null - 初始化CrimeData时,已从表格提取
crimeStatus变量但未传入构造函数,造成局部变量未使用的编译告警
修改步骤
(1)更新CrimeData构造函数
public CrimeData(String location, String crimeType, String crimeDetails, String crimeStatus) { this.location = location; this.crimeType = crimeType; this.crimeDetails = crimeDetails; this.crimeStatus = crimeStatus; // 正确初始化成员变量 }
(2)修改onCreate中创建CrimeData对象的代码
for (String[] rowData : tableData) { String location = rowData[0]; String crimeType = rowData[1]; String crimeDetails = rowData[2]; String crimeStatus = rowData[3]; // 传入crimeStatus参数到构造函数 CrimeData crimeData = new CrimeData(location, crimeType, crimeDetails, crimeStatus); crimeDataList.add(crimeData); }
2. 修复标记图标不按状态生效的问题
问题根源
- 字符串比较使用
==(比较对象引用)而非equals()(比较字符串内容) - 表格中未结案状态为
"Open",但判断条件写的是"Open Case",匹配失败 - 未处理
crimeStatus为null的情况,可能导致图标显示错误
修改步骤
更新onMapReady中的状态判断逻辑:
for (CrimeData crimeData : crimeDataList) { String locationName = crimeData.getLocation(); // 初始化默认图标(未结案状态) BitmapDescriptor customMarkerIcon = BitmapDescriptorFactory.fromResource(R.drawable.baseline_warning_24); String status = crimeData.getCrimeStatus(); // 先判空再用equals()比较字符串内容 if (status != null && status.equals("Closed")) { customMarkerIcon = BitmapDescriptorFactory.fromResource(R.drawable.baseline_check_circle_24); } else if (status != null && status.equals("Open")) { customMarkerIcon = BitmapDescriptorFactory.fromResource(R.drawable.baseline_warning_24); } // 后续地理编码、标记添加代码保持不变... }
额外优化建议
- 将状态值定义为常量(如
public static final String STATUS_CLOSED = "Closed"),避免硬编码字符串出错 - 地理编码操作建议放在异步任务中执行,避免阻塞主线程影响UI响应
内容的提问来源于stack exchange,提问作者Aaliyah McAfee
相关产品推荐
相关产品推荐

