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
相关产品推荐
相关产品推荐

