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

Android Java通过Volley响应为Google Maps API添加多标记及自动缩放问题

问题根因

你修改后的代码仅将构造好的MarkerOptions对象存入了列表,没有调用googleMap.addMarker()方法将标记实际渲染到地图上,所以仅能正常缩放到标记所在区域,但看不到任何标记。

修复方案

1. 新增标记渲染逻辑

在解析接口返回数据、构造MarkerOptions的循环中,添加将标记添加到地图的代码:

for(int i=0; i<jsonArray.length();i++){
    jsonObject = jsonArray.getJSONObject(i);
    LatLng vnr = new LatLng(jsonObject.getDouble("latitude"), jsonObject.getDouble("longitude"));
    MarkerOptions vnrMarker = new MarkerOptions();
    vnrMarker.position(vnr);
    vnrMarker.title(jsonObject.getString("name"));
    vnrMarker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
    // 新增行:将标记渲染到谷歌地图
    googleMap.addMarker(vnrMarker);
    markerList.add(vnrMarker);
}

2. 可选优化:添加边界构造的空判断

如果接口返回的服务商列表为空,直接构造LatLngBounds会触发崩溃,建议在showAllMarkers方法开头添加非空判断,同时可以针对单标记场景优化缩放体验:

private void showAllMarkers(GoogleMap googleMap) {
    // 空数据直接返回,避免崩溃
    if (markerList == null || markerList.isEmpty()) {
        return;
    }
    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    for (MarkerOptions m : markerList) {
        builder.include(m.getPosition());
    }
    // 单标记场景直接指定缩放级别,避免自动缩放层级过高
    if (markerList.size() == 1) {
        CameraUpdate cu = CameraUpdateFactory.newLatLngZoom(markerList.get(0).getPosition(), 15f);
        googleMap.animateCamera(cu);
        return;
    }
    LatLngBounds bounds = builder.build();
    int width = getResources().getDisplayMetrics().widthPixels;
    int height = getResources().getDisplayMetrics().heightPixels;
    int padding = (int) (width * 0.30);
    CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding);
    googleMap.animateCamera(cu);
}

内容的提问来源于stack exchange,提问作者The Only Smart Boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:39:02