Codename One:加载图像时处理服务器/连接不可用

时间:2017-04-01 11:50:29

标签: codenameone

似乎如果在调用URLImage.createCachedImage时加载并且图像不可用(没有连接等),则在连接恢复时不会再次调用它来重新加载。

说明

当连接不可用时,它会显示空白图像。当再次调用Display.getInstance()。callSerially(...)时,它仍然显示相同的空白图像。似乎没有调用连接来尝试加载图像,但空白图像显然已成为缓存。

我不确定我是否正确描述了我的问题,但这里是简化的问题:当连接/服务器是如何处理图像加载和处理事件时不可用?(我以为URLImage.createCachedImage知道图片是否未加载,会再试一次。)

我有这段代码加载Image:

protected static final Image loadImage(String imageAccessLocation) {
    int filenameIndex = imageAccessLocation.lastIndexOf("/");
    String filename = imageAccessLocation.substring(filenameIndex + 1);
    String imageAccessBaseLocation = Application.getInstance().getImagesAccessBaseLocation();
    String imageAccessURL = imageAccessBaseLocation + imageAccessLocation;
    int displayWidth = Display.getInstance().getDisplayWidth();
    EncodedImage imagePlaceholder = EncodedImage.createFromImage(Image.createImage(displayWidth, displayWidth / 5, 0xffff0000), true);
    Image image = URLImage.createCachedImage(filename, imageAccessURL, imagePlaceholder, FLAG_RESIZE_SCALE);
    return image;
}

protected static final Container prepareImageContainer(Item item) {
    Image image = item.getImage();
    if(image == null) {
        return null;
    }
    Image scaledImage = image.scaled(50, 50);
    Container imageContainer = new Container();
    imageContainer.add(scaledImage);
    return imageContainer;
}

private final void prepare() {
    Container imageContainer = prepareImageContainer(lookslike);
    Container textContainer = prepareTextDescription(lookslike);
    add(imageContainer);
    add(textContainer);
}

1 个答案:

答案 0 :(得分:2)

你是对的。如果存在网络问题,则URLImage将以静默方式失败。

如果URLImage由于某种原因尚未完成下载图像,则其ForeigKey方法将返回true。这是一种检测是否尚未完成下载的方法。它不会告诉您下载是否失败或者是否尚未完成,但您可以将其与某种超时结合使用以检查图像是否已下载,如果没有,则将其替换为相同URL的新URLImage

不太理想,我知道。您可以在问题跟踪器中提交RFE,我们将评估该请求。