android - 如何将 Gallery 中的图像显示到 ImageView?

标签 android android-camera android-imageview android-gallery

我想将从画廊拍摄的图像显示到 ImageView 中。但这并没有发生。我不明白为什么。我可以很好地使用相机功能并在相机的 ImageView 中看到图像,但看不到从画廊拍摄的图像。你们能帮帮我吗?

这是我的代码

protected Button mFromCamera;
protected Button mFromGallery;
protected ImageView mImageView;

private static final int CAMERA_REQUEST = 1888;
private static final int SELECT_PHOTO = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //Initialize ImageView
    mImageView = (ImageView) findViewById(R.id.ImgPrev);
    //Initialize Camera
    mFromCamera = (Button) findViewById(R.id.FromCamera);

    //use camera
    mFromCamera.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
        } //use camera end

    });

    //initialize button
    mFromGallery = (Button) findViewById(R.id.FromGallery);

    //pick a photo
    mFromGallery.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            photoPickerIntent.setType("image/*");
            startActivityForResult(photoPickerIntent, SELECT_PHOTO);
        }
    });//pick a photo end
}



//previewing Image
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        //from the gallery
        case SELECT_PHOTO:
            if (requestCode == SELECT_PHOTO && 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]);
                String picturePath = cursor.getString(columnIndex);
                cursor.close();

                mImageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
            }
            break;
        //from the camera
        case CAMERA_REQUEST:
            if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                mImageView.setImageBitmap(photo);
            }
            break;
    }
}//Preview Image End

唯一的问题是,从图库中选择的图像没有显示在 ImageView 中。我试过像处理“CAMERA_REQUEST”一样处理“SELECT_PHOTO”的情况。结果也不尽如人意。

最佳答案

也许 BitmapFactory.decodeFile(picturePath) 返回 null。核实。并检查您是否在 AndroidManifest.xml 中添加了权限:

android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE

文档中的 BitmapFactory.decodeFile(String filePath): http://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeFile(java.lang.String)

返回: 生成的解码位图,如果路径为空或无法解码,则为 null

关于android - 如何将 Gallery 中的图像显示到 ImageView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225652/

相关文章:

android - 为什么 Kotlin 数据类可以在 Gson 的不可空字段中包含空值?

android - Xamarin 安卓 : Change UI TextView text from Service or Receiver

android - 拍照时 Intent 始终为空

Android Camera - 录制视频时预览放大

Android ImageView 绘图对象

java - Android - Java - 传输/接收十六进制值

android - flutter_session 和 shared_preferences 在 flutter 中不能一起工作?

android - 将 ARToolkit 标记跟踪添加到 Tango

android - 设备屏幕尺寸对缩放的 ImageViews 有奇怪的影响

java - 在Android中使用ImageView控件创建错误