2010-11-10 35 views
1

我試圖下載圖像並將它們顯示在5x5網格中,並且我希望每個圖像在下載後立即顯示出來。如何在循環內的活動期間刷新字段?

我有一個VerticalFieldManager,並給它加上5 HorizontalFieldManager s。當我下載每個圖像(使用HttpConnection)時,我將其轉換爲Bitmap,然後將其放入BitmapField,然後將該字段添加到HorizontalFieldManager之一。

這是有效的,除非在下載完所有25個圖像之後我纔看到任何圖像,在這一點上,我可以看到它們全部。

我試過在下載每個圖像後調用invalidate(),但它似乎沒有任何效果。

回答

2

你是否正在下載UI事件線程?如果沒有,下載將阻止所有UI更新,直到完成,這將解釋您看到的行爲。

編輯基於新的信息評論:

HttpConnection阻止,所以你需要做的IO操作上的線程的UI線程之外。您的應用程序正在快速下載圖像,以阻止UI線程不會殺死整個應用程序。在一個緩慢的連接上,你的應用程序會在進行這些下載時被操作系統殺死。

該接口執行阻塞輸入和輸出操作。如果此接口的實現在主事件線程內打開連接,應用程序將會鎖定。通過在獨立於主事件線程的線程中打開連接,阻止應用程序鎖定。 SeeConnector獲取更多信息。

+0

是的,但每個下載單獨的(我創建並使用每個圖像不同的HttpConnection對象)。我想要做的是每次下載完成後更新UI。我假設我需要調用Windows的DoEvents,它可以發送任何待處理的UI相關消息。 – MusiGenesis 2010-11-10 14:21:22

2

1)你應該下載並在單獨的(非UI創建BitmapFieldThread

2)當你有一個BitmapField添加,然後做這樣的事情:

final BitmapField b = ... // your code to get the BitmapField 
UiApplication.getUiApplication().invokeAndWait(new Runnable() { 
    public void run() { 
     yourContainer.add(b); 
     yourContainer.invalidate(); // may not need this - try comment out 
    } 
});