2017-05-18 6 views
0

Ich habe versucht, in meiner Anwendung Bild aus der Galerie zu bekommen und es in Image setzen, aber ich bekomme Fehler „OutOfMemoryError“In Image nicht zeigt Bild aus der Galerie

FATAL EXCEPTION: main 
java.lang.OutOfMemoryError 
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:695) 
at kz.app.discount.activities.AddingProduct.onActivityResult(AddingProduct.java:374) 
at android.app.Activity.dispatchActivityResult(Activity.java:5456) 
at android.app.ActivityThread.deliverResults(ActivityThread.java:3402) 
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3449) 
at android.app.ActivityThread.access$1200(ActivityThread.java:150) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1328) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5279) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
at dalvik.system.NativeStart.main(Native Method)` 

-Code von Galerie mit Absicht immer Bild. ACTION_PICK und onActivityResult():

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 

     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

     Bitmap bitmap = null; 
     ImageView imageView = iVAddProductDiscountPicture; 

     switch (requestCode) { 
      case GALLERY_REQUEST: 
       if (resultCode == RESULT_OK) { 
        Uri selectedImage = imageReturnedIntent.getData(); 
        try { 
         bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage); 
         final ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
         bitmap.compress(Bitmap.CompressFormat.JPEG, 10, stream); 
         Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(stream.toByteArray())); 
         //TODO: дописать код сжатия изображения 
         imageView.setImageBitmap(decoded); 

        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        alertDialog.dismiss(); 

       } 
     } 
    } 
+0

'OutOfMemoryError' bedeutet, dass das Bild zu groß ist von Ihrem Gerät behandelt werden. Laden Sie es bereits skaliert. –

+2

@MichaelDodd, spielt die Dateigröße keine Rolle, nur die Auflösung. –

+1

@Wladimir Rudnicky bitte erhöhen Sie die Bitmap-Komprimierungsgröße 10 auf 100 und versuchen Sie bitmap.compress (Bitmap.CompressFormat.JPEG, 100, stream); –

Antwort

-1

in onCreate()

imgProfile.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent gallary = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(gallary,LOAD_IMG); 
     } 
    }); 

außerhalb onCrea te()

@Override 
    protected void onActivityResult(int requestCode,int resultCode,Intent data){ 
    super.onActivityResult(requestCode,resultCode,data); 

    try{ 
     if(requestCode==LOAD_IMG && resultCode==RESULT_OK && data!=null){ 

      Uri selectedImage = data.getData(); 
      String []filePath = {MediaStore.Images.Media.DATA}; 

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

      int columnIndex = cursor.getColumnIndex(filePath[0]); 
      String imgDecodableString = cursor.getString(columnIndex); 
      cursor.close(); 

      imgProfile.setImageBitmap(BitmapFactory.decodeFile(imgDecodableString)); 

     }else{ 
      Toast.makeText(this, "Please select image", Toast.LENGTH_LONG).show(); 
     } 
    }catch (Exception e){ 
     Toast.makeText(this, "error", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

Ich habe das versucht. Image view get leeres Bild, aber ich bekomme keinen Fehler - Fortschritt –

+0

Bitte erklären, ** im Detail **, wie dies ein "OutOfMemoryError" adressiert. – CommonsWare

0

versuchen mit diesem:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
      if (requestCode == SELECT_PICTURE) { 
      selectedImageUri =data.getData(); 
       Log.d("uri:----",""+selectedImageUri); 
    if (null != selectedImageUri) { 
       imgView.setImageURI(selectedImageUri); 
      } 
     } 
    } 
Verwandte Themen