0

私のアプリケーションが行うことは、単純に から画像を取得してsdcardに表示することlistviewです。から画像を選択すると、sdcardで正しく表示されますがlistview、 から同じ画像を 2 回選択するとsdcard、アプリケーションがクラッシュします。私が望むのは、同じ画像が2回目に選択された場合、その画像が既に存在するというトーストを与えるはずです。助けてくれてありがとう

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Uri selectedImage = data.getData();
    String[] filePathColumn = { MediaStore.Images.Media.DATA };

    Cursor cursor = getContentResolver().query(selectedImage,
            filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    Bitmap image=(BitmapFactory.decodeFile(picturePath));

    addattachmentsToListView(image);

    cursor.close();
}

ここにlogcatがあります

10-16 00:53:34.432: E/dalvikvm-heap(5905): Out of memory on a 24023056-byte allocation.
10-16 00:53:34.462: E/dalvikvm(5905): Out of memory: Heap Size=61575KB, Allocated=43470KB, Limit=65536KB
10-16 00:53:34.462: E/dalvikvm(5905): Extra info: Footprint=61575KB, Allowed Footprint=61575KB, Trimmed=0KB
10-16 00:53:34.462: E/AndroidRuntime(5905): FATAL EXCEPTION: main
10-16 00:53:34.462: E/AndroidRuntime(5905): java.lang.OutOfMemoryError: (Heap Size=61575KB, Allocated=43470KB)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:658)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:730)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at com.example.androidufoneapp.CustomerRegistrationL0.onActivityResult(CustomerRegistrationL0.java:257)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.app.Activity.dispatchActivityResult(Activity.java:5275)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3618)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3672)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.app.ActivityThread.access$1100(ActivityThread.java:151)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.os.Looper.loop(Looper.java:155)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at android.app.ActivityThread.main(ActivityThread.java:5454)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at java.lang.reflect.Method.invokeNative(Native Method)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at java.lang.reflect.Method.invoke(Method.java:511)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
10-16 00:53:34.462: E/AndroidRuntime(5905):     at dalvik.system.NativeStart.main(Native Method)
10-16 00:55:50.447: E/Trace(6372): error opening trace file: No such file or directory (2)
10-16 00:56:08.376: E/dalvikvm-heap(6372): Out of memory on a 24023056-byte allocation.
10-16 00:56:08.376: E/dalvikvm(6372): Out of memory: Heap Size=63559KB, Allocated=44806KB, Limit=65536KB
10-16 00:56:08.376: E/dalvikvm(6372): Extra info: Footprint=63559KB, Allowed Footprint=63559KB, Trimmed=0KB
10-16 00:56:08.386: E/AndroidRuntime(6372): FATAL EXCEPTION: main
10-16 00:56:08.386: E/AndroidRuntime(6372): java.lang.OutOfMemoryError: (Heap Size=63559KB, Allocated=44806KB)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:658)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:730)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at com.example.androidufoneapp.CustomerRegistrationL0.onActivityResult(CustomerRegistrationL0.java:257)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.app.Activity.dispatchActivityResult(Activity.java:5275)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3618)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3672)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.app.ActivityThread.access$1100(ActivityThread.java:151)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.os.Looper.loop(Looper.java:155)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at android.app.ActivityThread.main(ActivityThread.java:5454)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at java.lang.reflect.Method.invokeNative(Native Method)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at java.lang.reflect.Method.invoke(Method.java:511)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
10-16 00:56:08.386: E/AndroidRuntime(6372):     at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

0

必要なことは、ビットマップを保持していないこと、およびロードしているビットマップが現在持っているよりも多くのメモリを消費しないことを確認することです。これらのフォーラムには、これに関する多くのリソースがあり、これは Android 内でカバーされています。

ビットマップの効率的な読み込み

この時点で、それらのチェックが含まれている画像を取得するための組み込みリソースが含まれるようになったらいいでしょう(メソッド内のフラグなどで)。この問題はかなりどこでもカバーされています。

さらに、WeakReference を使用してビットマップを保持し、確実に解放することができます。後で Toast したことを確認したい場合は、画像の名前またはそれらの線に沿った何かを追跡する必要があります。それがあなたが探しているものである場合、一時的な解決策のためのデータベースまたはローカルメモリ。

于 2013-10-15T20:28:34.860 に答える