每当我的应用进入线上下载图片的布局时,设备将挂起,需要等待下载完成才能移动。在线下载图片时黑莓设备挂起
我做了一些研究。他们建议下载另一个Thread
。但是,我不明白如何在另一个Thread
中实现下载功能。
这是我的代码来调用下载图像功能。
Main.getUiApplication().invokeLater(new Runnable() {
public void run() {
for (j = 0; j < imagepath.length; j++) {
if (!imagepath[j].toString().equals("no picture")
&& Config_GlobalFunction.isConnected()) {
loader = new Util_LazyLoader(imagepath[j],
new Util_BitmapDowloadListener() {
public void ImageDownloadCompleted(
Bitmap bmp) {
imagebitmap[j] = bmp;
invalidate();
}
});
loader.run();
}
}
}
}, 500, false);
而且lazyloader
public class Util_LazyLoader implements Runnable {
String url = null;
Util_BitmapDowloadListener listener = null;
public Util_LazyLoader(String url, Util_BitmapDowloadListener listener) {
this.url = url;
this.listener = listener;
}
public void run() {
Bitmap bmpImage = getImageFromWeb(url);
listener.ImageDownloadCompleted(bmpImage);
}
private Bitmap getImageFromWeb(String url) {
HttpConnection connection = null;
InputStream inputStream = null;
EncodedImage bitmap;
byte[] dataArray = null;
try {
connection = (HttpConnection) (new ConnectionFactory())
.getConnection(url + Database_Webservice.ht_params)
.getConnection();
int responseCode = connection.getResponseCode();
if (responseCode == HttpConnection.HTTP_OK) {
inputStream = connection.openDataInputStream();
dataArray = IOUtilities.streamToBytes(inputStream);
}
} catch (Exception ex) {
} finally {
try {
inputStream.close();
connection.close();
} catch (Exception e) {
}
}
if (dataArray != null) {
bitmap = EncodedImage.createEncodedImage(dataArray, 0,
dataArray.length);
return bitmap.getBitmap();
} else {
return null;
}
}
}
我需要它的帮助,因为我在网络不熟悉。
好吧,它确实为listfield而不是其他领域。例如,我得到一个位图字段,我显示本地图像,然后在线程中运行下载。之后,我称之为'imagebitmap [j] = bmp; invalidate();'位图字段的图像不会像列表字段中那样改变。 – 2012-08-07 09:42:47
@AlanLai,我想知道如果问题是你正在使用变量'j'来确定'imagebitmap []'中的哪个位图存储。 'Util_BitmapDowloadListener'可能需要传递给索引'j'。你也可以发布那个界面吗? – Nate 2012-08-07 10:31:40
我解决了使用你的代码,包括'同步' – 2012-08-08 06:58:44