java.lang.OutOfMemoryError dans android tout en obtenant une image de la galerie android
Je suis à la sélection d'une image à partir de la galerie à l'aide de code
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, SELECT_PICTURE);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && null != 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]);
picturePath = cursor.getString(columnIndex);
cursor.close();
Log.v("picturePath", "picturePath: " + picturePath);
Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
Intent intentUpload = new Intent(GalleryActivity.this, UploadActivity.class);
//intentUpload.putExtra("BitmapImage", bitmap);
MyApplicationGlobal.bitmap = bitmap;
startActivity(intentUpload);
finish();
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
Mais j'obtiens une erreur
FATAL EXCEPTION: main
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:324)
at com.markphoto_activities.GalleryActivity.onActivityResult(GalleryActivity.java:59)
at android.app.Activity.dispatchActivityResult(Activity.java:4541)
at android.app.ActivityThread.deliverResults(ActivityThread.java:2740)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:2787)
at android.app.ActivityThread.access$2000(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1032)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4025)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
Journal-chat est
: E/dalvikvm-heap(2487): Out of memory on a 17915920-byte allocation.
"main" prio=5 tid=1 RUNNABLE
| group="main" sCount=0 dsCount=0 obj=0x400d5638 self=0x126c8
| sysTid=2487 nice=0 sched=0/0 cgrp=default handle=-1342909336
| schedstat=( 2650512000 283442000 1204 ) utm=226 stm=39 core=1
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:324)
at com.markphoto_activities.GalleryActivity.onActivityResult(GalleryActivity.java:59)
at android.app.Activity.dispatchActivityResult(Activity.java:4541)
at android.app.ActivityThread.deliverResults(ActivityThread.java:2740)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:2787)
at android.app.ActivityThread.access$2000(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1032)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4025)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
: D/skia(2487): libjpeg error 105 < Ss=%d, Se=%d, Ah=%d, Al=%d> from allocPixelRef [3456 2592]
: D/skia(2487): --- decoder->decode returned false
: D/AndroidRuntime(2487): Shutting down VM
hey, votre réponse est correcte et exacte de ce que je voulais. Mais en Pratique la réponse est un peu plus mieux. J'ai donc accepté, et désolé, je ne peux pas accepter l'autre, de sorte que seule upvoted
OriginalL'auteur Shirish Herwade | 2012-12-27
Vous devez vous connecter pour publier un commentaire.
Essayez ceci :
Et de déclarer ensuite la fonction suivante :
Grâce.
while(true)
avec unif(condition)
àbreak;
, et ça fait vraiment mal mes yeux. Vous pouvez tout simplement vous mettre à l'opposé de la condition de la boucle while, donc vous n'avez pas besoin de cette coupure plus. Dans ce cas:while (!(width_tmp / 2 < REQUIRED_SIZE && height_tmp / 2 < REQUIRED_SIZE)) {...}
Encouragements =) Cela rend votre code plus lisible ET qu'il est sémantique(!). N'hésitez pas à partager vos pensées, j'espère que vous allez comprendre ce que je voulais faire comprendre.comment savoir reqHeight et reqWidth? Je veux dire, avons-nous besoin de le fixer à la valeur statique? ou nous pouvons modifier ces w.r.t périphériques?
OriginalL'auteur Pratik Sharma
L'image que vous essayez de charge est trop grande. Qu'il causer de la taille du tas de croître rapidement et de remplissage, qui est à l'origine de l'application crash.
Essayez de réduire la taille de l'image, puis de la charger.
Vous pouvez utiliser l'extrait de code suivant:
OriginalL'auteur Usman Kurd
Ajouter en dessous de la fonction dans votre fichier java et l'appel à cette fonction dans
onActivityResult()
après l'obtention du chemin de l'image ou de l'image d'uri, il permettra de résoudre votre problème.OriginalL'auteur Dipak Keshariya
essayer de cette façon...
et c'est le décodage de la fonction...
OriginalL'auteur Mehul Ranpara