2017-05-09 75 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的響應,其中包含一條錯誤消息,讀取錯誤消息。 –