各行に画像があるListViewでAndroidアプリを作ろうとしています。私はすべての画像をBLOBデータ型のSQLiteデータベースに格納し、ListViewにこれらの画像を取り込みたいと思いますが、リストに2つ以上のJPEG画像がある場合は、OutOfMemoryErrorを取得します。私はすでに、メモリの使用を減らすためにインターネットで見つかった多くのテクニックを試しましたが、この問題を解決することはできません。私はoptions.inJustDecodeBoundsとoptions.inSampleSizeをアンドロイドのドキュメントで使用していますが、同じ例外が発生しています。私のコードは、ビットマップからバイト配列へ、バイト配列からビットマップへの変換で見つけることができます。Android Bitmap OutOfMemoryError in ListView
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class ListItem {
private int id;
private byte [] img;
private String title;
private String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public byte[] getImg() {
return img;
}
public void setImg(byte[] img) {
this.img = img;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static byte[] convertBitmapToBytes(Bitmap bmp){
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
return byteArray;
}
public static Bitmap getBitmap(byte [] bitmapdata){
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
ByteArrayInputStream inStream = new ByteArrayInputStream(bitmapdata);
BitmapFactory.decodeStream(inStream, null, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, 50, 50);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
Bitmap bmp = BitmapFactory.decodeStream(inStream,null,options);
return bmp;
}
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height/2;
final int halfWidth = width/2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight/inSampleSize) > reqHeight
&& (halfWidth/inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
}
'Manifest.xml' '<アプリケーションアンドロイド:largeHeap =" true "> ...' –
に同じエラーが発生しています – OrdinaryProgrammer