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

OSMDroid中MalformedURLException问题:地图瓦片加载失败如何解决

解决OsmDroid地图瓦片下载的MalformedURLException问题

看你的错误日志和代码,问题出在对完整瓦片URL做了不必要的URL编码,导致原本的http://被转成了http%3A%2F%2F,系统识别不出URL的协议头,自然抛出MalformedURLException。

错误原因拆解

你这段代码里:

prova = URLEncoder.encode(urll,"UTF-8");

把整个瓦片URL模板都编码了,这完全没必要。OsmDroid需要的是带占位符({z}/{x}/{y})的原始URL模板,它会自动替换这些占位符并发起正确的请求,不需要你提前编码整个URL。

修复后的完整代码

直接去掉URL编码步骤,同时使用正确的瓦片URL模板(包含z/x/y占位符,而不是固定的0/0/0.png单张瓦片地址):

// 用Stamen Toner瓦片的标准URL模板,包含z/x/y占位符
String tileUrlTemplate = "http://a.tile.stamen.com/toner/{z}/{x}/{y}.png";

final ITileSource customTileSource = new CustomTileSource("StamenToner", 3, 14, 256, ".png", new String[]{tileUrlTemplate});
final TilesOverlay overlay = new TilesOverlay(new MapTileProviderBasic(getApplicationContext(), customTileSource), getBaseContext());
overlay.setLoadingBackgroundColor(0);
map.getOverlays().add(overlay);

额外注意事项

  • 如果你的瓦片URL有特殊参数(比如带中文、空格的查询参数),只需要对单个参数值编码,不要碰整个URL结构。
  • 确保你的CustomTileSource实现支持OsmDroid的占位符规则(默认继承BasicTileSource的话就没问题),它会自动把{z}替换为缩放级别,{x}/{y}替换为瓦片坐标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:44:07