I noticed that ImageDownloadService is deprecated in favour of either of the other functions, but I cannot get them to work.
I have this code:
@Override
protected void onShowCompleted() {
super.onShowCompleted();
/**
* download thumbnails to display in list
*/
int n = CommonContext.INSTANCE.getPartsmodel().getSize();
for (int i = 0; i < n; i++) {
final Part part = (Part) CommonContext.INSTANCE.getPartsmodel().getItemAt(i);
String url = CommonContext.INSTANCE.getTHUMBURL() + part.getUrl();
// this gives EDT violation
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(100, 100, 0xffff0000), true);
URLImage background = URLImage.createToStorage(placeholder, part.getUrl(), url);
background.fetch();
// this does not - but get EOF on read
Util.downloadImageToStorage(url, part.getUrl(), new SuccessCallback<Image>() {
@Override
public void onSucess(Image value) {
}
});
// this works
ImageDownloadService.createImageToStorage(url, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
/**
* don't need to do anything, just save
*/
}
}, part.url);
if (!keep_downloading) {
break;
}
}
I've got a custom list cell renderer which uses the thumb nail images:
@Override
public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
final Part part = (Part) value;
code.setText(part.getKey());
price.setText("$" + new Money(part.getSell()).toString() + "/" + part.getUnit());
desc.setText((String) part.getDescription());
if (Storage.getInstance().exists(part.getUrl())) {
EncodedImage myimage = EncodedImage.create((byte[]) Storage.getInstance().readObject(part.getUrl()));
image.setIcon(myimage);
} else {
image.setIcon(blank);
}
return this;
}
ImageDownloadService works as I want, but the other two either give an EDT violation, or a get an EOF read error on storage. i.e.
--------------------------------------------------------
Util.downloadImageToStorage(url, part.getUrl(), new SuccessCallback<Image>() {
@Override
public void onSucess(Image value) {
}
});
get this:
java.io.EOFException
at java.io.DataInputStream.readBoolean(DataInputStream.java:244)
at com.codename1.io.Util.readObject(Util.java:532)
at com.codename1.io.Storage.readObject(Storage.java:256)
at com.webbtide.tpd.faultcodes.PartsListCellRenderer.getListCellRendererComponent(PartsListCellRenderer.java:88)
at com.codename1.ui.List.paint(List.java:1315)
at com.codename1.ui.Component.internalPaintImpl(Component.java:1308)
at com.codename1.ui.Component.paintInternalImpl(Component.java:1288)
at com.codename1.ui.Component.paintInternal(Component.java:1263)
at com.codename1.ui.Container.paint(Container.java:1317)
at com.codename1.ui.Component.internalPaintImpl(Component.java:1314)
at com.codename1.ui.Component.paintInternalImpl(Component.java:1288)
at com.codename1.ui.Component.paintInternal(Component.java:1263)
at com.codename1.ui.Container.paint(Container.java:1317)
at com.codename1.ui.Form.paint(Form.java:3113)
at com.codename1.ui.Component.internalPaintImpl(Component.java:1314)
at com.codename1.ui.Form.internalPaintImpl(Form.java:3123)
at com.codename1.ui.Component.paintInternalImpl(Component.java:1288)
at com.codename1.ui.Component.paintInternal(Component.java:1263)
at com.codename1.ui.Component.paintInternal(Component.java:1231)
at com.codename1.ui.Component.paintComponent(Component.java:1516)
at com.codename1.ui.Dialog.initDialogBgPainter(Dialog.java:1931)
at com.codename1.ui.Form.showModal(Form.java:1796)
at com.codename1.ui.Dialog.showModal(Dialog.java:1048)
at com.codename1.ui.Dialog.show(Dialog.java:516)
at com.codename1.ui.Dialog.showPackedImpl(Dialog.java:1350)
at com.codename1.ui.Dialog.showPacked(Dialog.java:1258)
at com.codename1.ui.Dialog.showImpl(Dialog.java:1004)
at com.codename1.ui.Dialog.show(Dialog.java:982)
at com.codename1.ui.Dialog.show(Dialog.java:938)
at com.codename1.ui.Dialog.show(Dialog.java:727)
at com.codename1.ui.Dialog.show(Dialog.java:680)
at com.codename1.ui.Dialog.show(Dialog.java:645)
at com.codename1.ui.Dialog.show(Dialog.java:586)
at com.codename1.ui.Dialog.show(Dialog.java:741)
at com.codename1.ui.Display.mainEDTLoop(Display.java:1009)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
java.lang.NullPointerException
at com.codename1.ui.EncodedImage.create(EncodedImage.java:264)
at com.webbtide.tpd.faultcodes.PartsListCellRenderer.getListCellRendererComponent(PartsListCellRenderer.java:88)
at com.codename1.ui.List.paint(List.java:1315)
at com.codename1.ui.Component.internalPaintImpl(Component.java:1308)
at com.codename1.ui.Component.paintInternalImpl(Component.java:1288)
at com.codename1.ui.Component.paintInternal(Component.java:1263)
at com.codename1.ui.Container.paint(Container.java:1317)
at com.codename1.ui.Component.internalPaintImpl(Component.java:1314)
at com.codename1.ui.Component.paintInternalImpl(Component.java:1288)
at com.codename1.ui.Component.paintInternal(Component.java:1263)
at com.codename1.ui.Container.paint(Container.java:1317)
at com.codename1.ui.Form.paint(Form.java:3113)
at com.codename1.ui.Component.internalPaintImpl(Component.java:1314)
at com.codename1.ui.Form.internalPaintImpl(Form.java:3123)
at com.codename1.ui.Component.paintInternalImpl(Component.java:1288)
at com.codename1.ui.Component.paintInternal(Component.java:1263)
at com.codename1.ui.Component.paintInternal(Component.java:1231)
at com.codename1.ui.Component.paintComponent(Component.java:1516)
at com.codename1.ui.Dialog.initDialogBgPainter(Dialog.java:1931)
at com.codename1.ui.Form.showModal(Form.java:1796)
at com.codename1.ui.Dialog.showModal(Dialog.java:1048)
at com.codename1.ui.Dialog.show(Dialog.java:516)
at com.codename1.ui.Dialog.showPackedImpl(Dialog.java:1350)
at com.codename1.ui.Dialog.showPacked(Dialog.java:1258)
at com.codename1.ui.Dialog.showImpl(Dialog.java:1004)
at com.codename1.ui.Dialog.show(Dialog.java:982)
at com.codename1.ui.Dialog.show(Dialog.java:938)
at com.codename1.ui.Dialog.show(Dialog.java:727)
at com.codename1.ui.Dialog.show(Dialog.java:680)
at com.codename1.ui.Dialog.show(Dialog.java:645)
at com.codename1.ui.Dialog.show(Dialog.java:586)
at com.codename1.ui.Dialog.show(Dialog.java:741)
at com.codename1.ui.Display.mainEDTLoop(Display.java:1009)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
[EDT] 0:0:0,0 - java.lang.NullPointerException
[EDT] 0:0:0,1 - java.lang.NullPointerException
---------------------------------------------------------------------------------------------------
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(100, 100, 0xffff0000), true);
URLImage background = URLImage.createToStorage(placeholder, part.getUrl(), url);
background.fetch();
get this:
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:523)
at com.codename1.impl.javase.JavaSEPort.getRGB(JavaSEPort.java:3747)
at com.codename1.impl.javase.JavaSEPort.scaleArray(JavaSEPort.java:3979)
at com.codename1.impl.javase.JavaSEPort.scale(JavaSEPort.java:3963)
at com.codename1.ui.Image.scale(Image.java:1007)
at com.codename1.ui.Image.scaledImpl(Image.java:953)
at com.codename1.ui.Image.scaled(Image.java:918)
at com.codename1.ui.Image.scaledLargerRatio(Image.java:902)
at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:103)
at com.codename1.ui.URLImage$DownloadCompleted.run(URLImage.java:187)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:103)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:140)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:523)
at com.codename1.impl.javase.JavaSEPort.getRGB(JavaSEPort.java:3747)
at com.codename1.impl.javase.JavaSEPort.scaleArray(JavaSEPort.java:3979)
at com.codename1.impl.javase.JavaSEPort.scale(JavaSEPort.java:3963)
at com.codename1.ui.Image.scale(Image.java:1007)
at com.codename1.ui.Image.scaledImpl(Image.java:953)
at com.codename1.ui.Image.scaled(Image.java:918)
at com.codename1.ui.Image.scaledLargerRatio(Image.java:902)
at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:103)
at com.codename1.ui.URLImage$DownloadCompleted.run(URLImage.java:187) at com.codename1.ui.URLImage$DownloadCompleted.run(URLImage.java:187)
I'm obviously doing something wrong, but can't figure it out.