Android Mini-map Fragment无法显示传递的位置问题求助
问题诊断与修复方案
核心问题:经纬度参数顺序错误
你日志中显示的经纬度为纬度120.7152931,经度15.4487153,但纬度的有效范围是 -90~90,经度是 -180~180,显然数值对应关系搞反了。而LatLng构造方法要求纬度在前,经度在后,错误的参数顺序会导致地图定位到无效区域,无法显示目标位置。
修复步骤:
- 核对Firebase存储字段:先确认Firebase中
latitude和longitude字段存储的数值是否本身就颠倒了,若数据库数据有误,先修正存储内容; - 调整代码中的参数顺序:如果是使用时顺序错误,修改
initializeMap()中的LatLng构造代码:
若是Intent传递时就颠倒了,在发送页面调换// 原错误代码 LatLng location = new LatLng(latitude, longitude); // 修改为正确顺序 LatLng location = new LatLng(longitude, latitude);putExtra的参数值即可。
次要问题:地图初始化时机冲突
在onCreate中调用checkLocationPermission()会提前触发initializeMap(),但此时mMap还未通过onMapReady完成初始化,会触发"Map is not ready yet"的提示。虽然后续onMapReady会再次执行初始化,但可优化逻辑避免无效提示:
优化方案:
删除onCreate中的checkLocationPermission()调用,仅在onMapReady中处理权限与地图初始化,确保mMap已就绪:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_emergency_details); // 接收Intent数据 String scenarioData = getIntent().getStringExtra("Scenario"); String emergencyTypeData = getIntent().getStringExtra("Emergency Type"); latitude = getIntent().getDoubleExtra("Latitude", 0.0); longitude = getIntent().getDoubleExtra("Longitude", 0.0); // 设置文本内容 TextView tvScenarioData = findViewById(R.id.tvScenario); TextView tvEmergencyTypeData = findViewById(R.id.tvEmergencyType); tvScenarioData.setText(scenarioData); tvEmergencyTypeData.setText(emergencyTypeData); // 初始化地图Fragment SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.miniMapFragment); if (mapFragment != null) { mapFragment.getMapAsync(this); } else { Toast.makeText(this, "Error loading map!", Toast.LENGTH_SHORT).show(); } Log.d("EmergencyDetails", "Received Latitude: " + latitude); Log.d("EmergencyDetails", "Received Longitude: " + longitude); } @Override public void onMapReady(@NonNull GoogleMap googleMap) { mMap = googleMap; // 权限检查与地图初始化统一在此处理 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { initializeMap(); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE); } }
验证要点
修复后重新运行,确认:
- 地图是否定位到目标区域(15.4487153, 120.7152931,即菲律宾附近);
- 不再出现"Map is not ready yet"的提示;
- 日志中的经纬度数值与Firebase存储一致。
内容的提问来源于stack exchange,提问作者Rafael Campos
相关产品推荐
相关产品推荐

