我使用通用图像加载器在网格视图中加载图像并加载图像预览,内存不足错误问题一直在发生。我尝试了很多改变配置,显示选项的方法。但没用请给出正确的解决方法。
这是我使用通用图像加载器lib显示图像的代码,
ImageLoader imageLoader = ImageLoader.getInstance();
ImageLoaderConfiguration imageLoaderconfig = new ImageLoaderConfiguration.Builder(
ImagePreview.this).threadPoolSize(1)
.writeDebugLogs().memoryCache(new WeakMemoryCache())
.build();
imageLoader.init(imageLoaderconfig);
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.empty_icon)
.bitmapConfig(Config.RGB_565)
.showImageForEmptyUri(R.drawable.image_for_empty_url)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();
imageLoader.displayImage("file://"
+ CommonVariables.preview_image_path, image_preview,
options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
// TODO Auto-generated method stub
findViewById(R.id.pb_pd).setVisibility(
View.INVISIBLE); // progress bar
Toast.makeText(getApplicationContext(),
"Oops ! Please try again later",
Toast.LENGTH_SHORT).show();
}
@Override
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
// TODO Auto-generated method stub
Animation anim = AnimationUtils.loadAnimation(
ImagePreview.this, R.anim.fade_in);
findViewById(R.id.pb_pd).setVisibility(
View.INVISIBLE); // progress bar
image_preview.setAnimation(anim);
anim.start();
}
@Override
public void onLoadingCancelled(String imageUri,
View view) {
// TODO Auto-generated method stub
findViewById(R.id.pd).setVisibility(View.INVISIBLE); // progress bar
}
});
例外:( Log Cat)
10-22 12:30:00.414: E/AndroidRuntime(6908): FATAL EXCEPTION: main
10-22 12:30:00.414: E/AndroidRuntime(6908): java.lang.OutOfMemoryError
10-22 12:30:00.414: E/AndroidRuntime(6908): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-22 12:30:00.414: E/AndroidRuntime(6908): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:546)
10-22 12:30:00.414: E/AndroidRuntime(6908): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:320)
10-22 12:30:00.414: E/AndroidRuntime(6908): at com.doodleblue.dateitpro.Home.decodeSampledBitmapFromUri(Home.java:669)
10-22 12:30:00.414: E/AndroidRuntime(6908): at com.doodleblue.dateitpro.Home.addDateTime(Home.java:413)
10-22 12:30:00.414: E/AndroidRuntime(6908): at com.doodleblue.dateitpro.Home.callmethods(Home.java:356)
10-22 12:30:00.414: E/AndroidRuntime(6908): at com.doodleblue.dateitpro.Home.onCreate(Home.java:236)
10-22 12:30:00.414: E/AndroidRuntime(6908): at android.app.Activity.performCreate(Activity.java:5020)
10-22 12:30:00.414: E/AndroidRuntime(6908): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
答案 0 :(得分:0)
尝试创建图像缩略图。这对我有用
final int THUMBSIZE = 64;
Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(imagePath),
THUMBSIZE, THUMBSIZE);
答案 1 :(得分:0)
当图像在虚拟内存较少时加载时会发生此错误。 这可以通过创建位图缩放图像来解决。 获取数组中的所有drawable,然后像这样创建重新缩放的位图。
Bitmap bit = BitmapFactory.decodeResource(getApplicationContext()
.getResources(), drawable);
if (bit != null) {
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bit, width,
height, true);
imageView.setBitmap(resizedBitmap);
}
重新缩放的位图不会占用更多虚拟内存并轻松加载图像
BitmapDrawable bd=(BitmapDrawable) this.getResources().getDrawable(R.drawable.icon);
int height=bd.getBitmap().getHeight();
int width=bd.getBitmap().getWidth();