-1

グリッド ビューでの画像の読み込みと画像のプレビューの読み込みにユニバーサル イメージ ローダーを使用していますが、メモリ不足エラーの問題が発生し続けます。構成、表示オプションを変更する多くの方法を試しました。しかし、役に立たない。それを解決する正しい方法を教えてください。

ユニバーサル イメージ ローダー 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
                    }
                });

例外: (ログ キャット)

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)
4

2 に答える 2

0

このエラーは、仮想メモリが少ないときにイメージが仮想メモリに読み込まれると発生します。これは、ビットマップのスケーリングされたイメージを作成することで解決できます。配列内のすべてのドローアブルを取得し、このように再スケーリングされたビットマップを作成します。

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();
于 2013-10-22T06:42:19.453 に答える
0

画像のサムネイルを作成してみてください。これは私のために働いた

final int THUMBSIZE = 64;
Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(imagePath), 
                    THUMBSIZE, THUMBSIZE);
于 2013-10-22T06:38:11.357 に答える