代号一个加载UrlImage问题

时间:2017-05-09 03:37:44

标签: codenameone

我一直在开发一个我有客户列表的应用程序,我将客户显示为一个列表(使用容器而不是列表,如代号1中所述)。从带有前导标签的列表中我点击该项目,然后进入详细页面,在该页面中显示客户图片和其他信息。 这是我从url(亚马逊s3桶)获取图像的代码

private Image getUserProfilePicture(String imgName)
{
Image defaultImage = FromResource("DefaultPhoto.png");
int width = defaultImage.getWidth();
int height = defaultImage.getHeight();

String imgUrl = "image from s3 bucket";
EncodedImage placeHolder = (EncodedImage)defaultImage;
Image roundMask = Image.createImage(width, height, 0xff000000);
Graphics gr = roundMask.getGraphics();
gr.setColor(0xffffff);
gr.fillArc(0, 0, width, height, 0, 360);
URLImage.ImageAdapter ada = URLImage.createMaskAdapter(placeHolder);
//image is deleted from storage before load
Image profileImage = URLImage.createToStorage(placeHolder, imgName, 
imgUrl, ada);
return profileImage;
}

有些客户没有图片可供使用,我确实看到了默认图片。当我回到列表并再次点击同一客户时,我没有显示任何图像。空白色空间。相反,我在调试器窗口中收到以下错误消息。

  

[EDT] 0:0:0,1 - 异常:java.lang.IllegalArgumentException - 创建   对于长度为306的给定图像数据,图像失败   java.lang.IllegalArgumentException:为给定的创建图像失败   长度为306的图像数据   com.codename1.ui.Image.createImage(Image.java:655)at   com.codename1.ui.EncodedImage.getInternal(EncodedImage.java:366)at at   com.codename1.ui.EncodedImage.getInternalImpl(EncodedImage.java:341)   在com.codename1.ui.EncodedImage.getWidth(EncodedImage.java:512)at at   com.codename1.ui.URLImage $ ScaleToFill.adaptImage(URLImage.java:116)at at   com.codename1.ui.URLImage $ DownloadCompleted.actionPerformed(URLImage.java:239)   在com.codename1.ui.URLImage $ 4.onSucess(URLImage.java:302)at   com.codename1.ui.URLImage $ 4.onSucess(URLImage.java:298)at   com.codename1.util.CallbackDispatcher.run(CallbackDispatcher.java:53)   在com.codename1.ui.Display.processSerialCalls(Display.java:1155)at   com.codename1.ui.Display.edtLoopImpl(Display.java:1099)at   com.codename1.ui.Display.mainEDTLoop(Display.java:1000)at   com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)在

  com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

当我回到列表并再次点击同一客户时,我确实看到了默认图像。 我每次点击都会收到此错误消息。我完全迷失在这里。

据我所知,占位符图片将一直显示,直到从网址加载图片为止。在这种情况下,s3存储桶中没有图像。 由于我没有使用NetworkManager检查204响应代码,因此无法确定图像是否已加载。我直接使用带URLImage的s3 url。

任何帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

清除本地存储空间以确保下载图像。打开网络监视器并查看结果。 306字节似乎是图像的错误大小所以我猜测你从亚马逊那里得到一条错误信息并尝试将其作为图像读取。

如果您打开网络监视器,您应该能够检查发送的请求和响应,并查看请求失败的原因。