有没有办法取消挂起的磁贴请求?

时间:2017-02-02 18:45:41

标签: dictionary codenameone

我正在尝试使用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()并失败。

在所有情况下,后续调用都会向网络管理员发送请求失败。

2 个答案:

答案 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);
}