我正在尝试下载图像并以5x5网格显示它们,我希望每个图像在下载后立即显示。
我有一个VerticalFieldManager
,我添加了5 HorizontalFieldManager
s。当我下载每张图片时(使用HttpConnection
),我将其转换为Bitmap
,然后将其放入BitmapField
,然后将该字段添加到其中一个HorizontalFieldManager
。< / p>
这是有效的,只是在我下载所有25张照片之前我都没有看到任何图像,此时我看到了所有图像。
我已尝试在下载每张图片后调用invalidate()
所涉及的所有内容,但似乎没有任何效果。
答案 0 :(得分:2)
您是否正在从UI事件线程下载?如果没有,下载将阻止所有UI更新,直到完成,这将解释您看到的行为。
根据评论中的新信息进行修改:
HttpConnection正在阻塞,因此您需要在UI线程之外的线程上执行IO操作。您的应用程序正在快速下载图像,阻止UI线程不会杀死整个应用程序。在连接速度较慢时,您的应用程序将在执行这些下载时被操作系统杀死。
此接口执行阻止输入和输出操作。如果此接口的实现从主事件线程中打开连接,则应用程序将锁定。通过从与主事件线程分开的线程中打开连接来阻止应用程序锁定。有关详细信息,请参阅连接器。
答案 1 :(得分:2)
1)您应该在单独的(非UI)BitmapField
上下载并创建Thread
。
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
}
});