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

Android Mini-map Fragment无法显示传递的位置问题求助

问题诊断与修复方案

核心问题:经纬度参数顺序错误

你日志中显示的经纬度为纬度120.7152931,经度15.4487153,但纬度的有效范围是 -90~90,经度是 -180~180,显然数值对应关系搞反了。而LatLng构造方法要求纬度在前,经度在后,错误的参数顺序会导致地图定位到无效区域,无法显示目标位置。

修复步骤:

  1. 核对Firebase存储字段:先确认Firebase中latitude和longitude字段存储的数值是否本身就颠倒了,若数据库数据有误,先修正存储内容;
  2. 调整代码中的参数顺序:如果是使用时顺序错误,修改initializeMap()中的LatLng构造代码:
    // 原错误代码
    LatLng location = new LatLng(latitude, longitude);
    // 修改为正确顺序
    LatLng location = new LatLng(longitude, latitude);
    
    若是Intent传递时就颠倒了,在发送页面调换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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:44:55