我正在尝试使用OSM服务器上的以下代码取消挂起的磁贴请求:
NetworkManager netMgr = NetworkManager.getInstance();
Enumeration connections = netMgr.enumurateQueue();
while (connections.hasMoreElements()) {
ConnectionRequest connection = (ConnectionRequest)connections.nextElement();
if (connection.getUrl().indexOf("osm_tiles") > 0) {
connection.kill();
}
}
我也尝试使用netManager.killAndWait(连接)进行枚举。
我还尝试使用start()启动netMgr.shutdownAsync()并失败。
在所有情况下,后续调用都会向网络管理员发送请求失败。
答案 0 :(得分:0)
Kill会有效地做到这一点,导致请求失败,这需要由底层实现来处理。我猜测MapComponent
没有正确处理它并且这会向前传播,这是有问题的。
由于我们的工作主要集中在原生地图上,所以我不确定这是否会在不久的将来得到解决。正确的做法是遵循错误处理逻辑并在MapComponent
内正确处理取消的情况。如果您能够在Codename One中执行此操作,则可以submit a pull request。
答案 1 :(得分:0)
ProxyHttpTile的替换构造函数应该消除与取消网络磁贴请求相关的问题。
public ProxyHttpTile(Dimension tileSize, BoundingBox bbox, String url) {
super(tileSize, bbox, null);
String _url = url;
String cacheId = url.substring(url.indexOf(":") + 1);
cacheId = StringUtil.replaceAll(cacheId, "\\", "_");
cacheId = StringUtil.replaceAll(cacheId, "/", "_");
cacheId = StringUtil.replaceAll(cacheId, ".", "_");
cacheId = StringUtil.replaceAll(cacheId, "?", "_");
cacheId = StringUtil.replaceAll(cacheId, "&", "_");
ImageDownloadService.createImageToStorage(url, new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
NetworkEvent ne = (NetworkEvent) evt;
if (ne.getError() == null) { // Test for exception
if (ne.getProgressType() == NetworkEvent.PROGRESS_TYPE_COMPLETED) { // Test for completion
Image i = (Image) ne.getMetaData();
i.lock();
_tile = new Tile(ProxyHttpTile.this.dimension(),
ProxyHttpTile.this.getBoundingBox(),
i);
ProxyHttpTile.this.fireReady();
} //
} //
}
}, cacheId, true);
}