在ImageView中不显示图库中的图片

时间:2017-05-18 11:42:46

标签: android imageview bitmapfactory

我试图在我的应用程序中从图库中获取图像并将其放在ImageView中,但是我收到错误“OutOfMemoryError”

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

使用Intent.ACTION_PICK和onActivityResult()从galery获取图像的代码:

@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();

                }
        }
    }

2 个答案:

答案 0 :(得分:0)

尝试使用此:

  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);
            }
        }
    }

答案 1 :(得分:-1)

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);
        }
    });

在onCreate()之外

    @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();
    }
}