Java 将图片插入到imageview中

Java 将图片插入到imageview中,java,android,Java,Android,在我的应用程序中,我将两张图片插入到两个图像视图中,并使用“活动结果”从图库中获取照片 private void showFileChooser () { mHandler.post(new Runnable() { @Override public void run() { Intent intent = new Intent(); intent.setType

在我的应用程序中,我将两张图片插入到两个图像视图中,并使用“活动结果”从图库中获取照片

 private void showFileChooser () {

        mHandler.post(new Runnable() {
            @Override
            public void run() {

                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
            }
        });
}

private void showFileChooser2 () {

    mHandler.post(new Runnable() {
        @Override
        public void run() {

            Intent intent2 = new Intent();
            intent2.setType("image/*");
            intent2.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent2, "Select Picture"), PICK_IMAGE_REQUEST2);

        }
    });
}


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

            if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
                Uri filePath = data.getData();
                try {
                    //Getting the Bitmap from Gallery
                    bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                    rbitmap = getResizedBitmap(bitmap, 1000);//Setting the Bitmap to ImageView
                    imageViewUserImage.setImageBitmap(rbitmap);
                    imageViewUserImage.requestFocus();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else if (requestCode == PICK_IMAGE_REQUEST2 && resultCode == RESULT_OK && data != null && data.getData() != null) {
                Uri filePath2 = data.getData();
                try {
                    //Getting the Bitmap from Gallery
                    bitmap2 = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath2);
                    rbitmap2 = getResizedBitmap(bitmap2, 1000);//Setting the Bitmap to ImageView
                    imageViewUserImage2.setImageBitmap(rbitmap2);
                    imageViewUserImage2.requestFocus();
                } catch (IOException e) {
                    e.printStackTrace();
                }
}
}
该应用程序运行良好,但有时会发生奇怪的事情。有时,当我在gallery中单击所需的照片时,该应用程序返回到主活动,我发现另一个图像视图中先前加载的图像被删除。换句话说,有时在其中一个视图中加载图片会删除另一个视图中加载的图像。 这种故障并不总是发生,有时会发生,有时应用程序运行良好,没有任何问题


如何修复此问题?

在“e.printStackTrace();”上的捕捉中放置一个断点线路。 使用应用程序,查看失败的原因。
没有任何堆栈跟踪,我们只能猜测原因。

我发现了问题。图像的大小有点大,因此出现了“内存不足”错误。为了避免此类问题,我在其if case中回收了每个位图

private void showFileChooser () {

        mHandler.post(new Runnable() {
            @Override
            public void run() {

                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
            }
        });
}

private void showFileChooser2 () {

    mHandler.post(new Runnable() {
        @Override
        public void run() {

            Intent intent2 = new Intent();
            intent2.setType("image/*");
            intent2.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent2, "Select Picture"), PICK_IMAGE_REQUEST2);

        }
    });
}


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

            if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
                Uri filePath = data.getData();
                try {
                    //Getting the Bitmap from Gallery
                    bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                    rbitmap = getResizedBitmap(bitmap, 1000);//Setting the Bitmap to ImageView
                    imageViewUserImage.setImageBitmap(rbitmap);
                    bitmap.recycle;
                    imageViewUserImage.requestFocus();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else if (requestCode == PICK_IMAGE_REQUEST2 && resultCode == RESULT_OK && data != null && data.getData() != null) {
                Uri filePath2 = data.getData();
                try {
                    //Getting the Bitmap from Gallery
                    bitmap2 = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath2);
                    rbitmap2 = getResizedBitmap(bitmap2, 1000);//Setting the Bitmap to ImageView
                    imageViewUserImage2.setImageBitmap(rbitmap2);
                    bitmap2.recycle;
                    imageViewUserImage2.requestFocus();
                } catch (IOException e) {
                    e.printStackTrace();
                }
}
}