2017-05-09 87 views
2

我一直在做一个应用程序,我有客户名单,我将客户列为一个列表(使用容器代替列表,代码名称解释如此)。从带有领先标签的列表中,我点击该项目,然后转到详细信息页面,在此处显示客户图片和其他信息。 这里是我的代码从URL(Amazon S3的桶)图像Codename one loading UrlImage issue

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)在 com.codename1.ui.EncodedImage.getInternal(EncodedImage.java:366)在 com.codename1。 ui.EncodedImage.getInternalImpl(EncodedImage.java:341) at com.codename1.ui.EncodedImage.getWidth(EncodedImage.java:512)at com.codename1.ui.URLImage $ ScaleToFill.adaptImage(URLImage.java:116)在 com.codename1.ui.URLImage $ DownloadCompleted.actionPerformed(URLImage.java:239) at 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) at com.codename1.ui.Display.processSerialCalls(Display.java:1155)at com.codename1.ui .Display.edtLoopImpl(Display.java:1099)在 com.codename1.ui.Display.mainEDTLoop(Display.java:1000)在 com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)在
com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

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

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

任何帮助将不胜感激。

谢谢。

回答

0

清除本地存储以确保图像已下载。打开网络监视器并查看结果。 306字节看起来像一个图像大小错误,所以我猜你正在从亚马逊收到一条错误消息,并试图将其作为图像读取。

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

+0

嗨Sha,感谢您的反馈。我试图监视网络,我确实发现请求是在其他每次点击时完成的。我确实将客户ID作为图像名称保存到存储文件。假设客户ID是12345,我确实看到12345ImageURLTMP名称被添加到存储中。这是导致问题的原因。当我手动删除这两个名称,它工作正常。任何原因?谢谢。 – Ravimaran

+0

TMP文件很好。在网络监视器中,您应该看到来自Amazon的响应,其中包含一条错误消息,读取错误消息。 –