carImageView中的图像是动态加载的,收到来自db的响应,带有url of picture,然后称为setUrl(url)。
下一篇:我想做一些依赖于当前图像的操作(方法foo())。所以,我可以处理事件“onLoad”并将我的方法foo()放在这个处理程序中。但是如果新加载的图像与最后一个图像相同,则不会发生此事件(为什么?)。
问题的核心 - 如果我在调用image.setUrl(url)之后放置方法foo(),是否有可能,该图像在carImageView中没有呈现t loaded yet and hasn
,但是方法foo()已经做了什么?我怎么能避免这件事?
PS sry for my English。
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url));
showLoadingPanel();
try {
builder.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
final int code = response.getStatusCode();
final String text = response.getText();
if (code == 200) {
if (response.getHeader("Content-Type").contains("text/html") &&
text.contains("<meta name=\"login\"/>")) {
Window.Location.reload();
return;
}
String img = "data:image/jpeg;base64," + text;
cameraImage.setUrl(img);
foo();
hideLoadingPanel();
} else {
showImageNotFoundError();
hideLoadingPanel();
}
}
@Override
public void onError(Request request, Throwable e) {
eventBus.fireEvent(new ServerRequestFailureEvent(e, this.getClass()));
hideLoadingPanel();
}
});
} catch (RequestException e) {
eventBus.fireEvent(new ServerRequestFailureEvent(e, this.getClass()));
hideLoadingPanel();
}
答案 0 :(得分:0)
也许只是将来电推迟到foo()
(使用Scheduler#scheduleDeferred()
):
cameraImage.setUrl(img);
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
foo();
}
});
答案 1 :(得分:0)
我在过去遇到过类似的问题,gwt-image-loader项目为我解决了这个问题!
解决您的问题:
FitImage image = new FitImage();
image.addFitImageLoadHandler(new FitImageLoadHander() {
public void imageLoaded(FitImageLoadEvent event) {
if (!event.isLoadFailed()) {
foo();
}
}
});
image.setUrl("data:image/jpeg;base64," + text;);
现在foo()
只会在加载图片后运行。看看这个项目,像ImagePreloader
这样的东西派上用场了!
答案 2 :(得分:0)
我在showLoadingPanel()之后放置了调用cameraImage.setUrl(“”)。现在我可以处理onLoad事件,即使新图像与最后一个图像相同。 它帮助我和我认为它比其他人更容易,也许更好的决定。