我正在使用AsyncTask从服务器下载一些文本和图像。我将文本和图像存储在sq-lite数据库中。我以字节数组的形式存储。
在AsyncTask的post Execute方法中,我将转换图像保存在字节数组中,并使用for循环将它们存储在数据库中。
问题是当我在数据库列表视图中显示数据时,有时会显示正确的图像,但有时会显示错误的图像。我正在使用处理程序将信息延迟到列表视图8秒。我不知道为什么有时它会显示正确的图像,有时它会显示错误的图像。
我做错了什么?如何每次都显示正确的图像。此外,任何人都可以帮助我如何避免日志猫消息:
“跳过XXX帧。应用程序在主线程中做了很多工作。”
我正在使用片段。当应用程序启动时,它将从服务器获取数据,其中包含URL到Image。我正在使用该URL下载图像。将文本和图像存储在数据库中,并在onPostExecute方法的列表视图中显示。
以下是我用过的代码:
// convert from bitmap to byte array
public static byte[] getBytes(Bitmap bitmap) {
ByteArrayOutputStream byteArrayOutputStream =
new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
在我正在扩展CursorAdapter类的适配器类中。我从sq-lite数据库获取字节数组并将其转换为图像并将其显示到列表视图。
从字节数组转换为位图的代码如下:
private static Bitmap getImage(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
我将其设置为列出查看项目,如下所示:
byte [] image = cursor.getBlob(imageColumnIndex);
if(image == null)
{
}else{
Bitmap bitmap = getImage(image);
imageView.setImageBitmap(bitmap);
}