通过摄像头捕获显示图像时图像视图出错

时间:2015-06-10 10:21:34

标签: java android camera imageview

我是Android的新手,我正试图让我的手机摄像头拍照并在图像视图中显示。捕获图像时,它会被正确保存但在此之后,当图像应在图像视图中显示时,应用程序将停止工作。任何帮助表示赞赏。我搜索了一些主题,但仍然无效。 这是代码:

{{1}}

堆栈跟踪

  

引起:java.lang.RuntimeException:传递结果失败   ResultInfo {who = null,request = 0,result = -1,data = null}到活动   {} myfirstapp.myapps.me.camera/myfirstapp.myapps.me.camera.MainActivity:   java.lang.NullPointerException at   android.app.ActivityThread.deliverResults(ActivityThread.java:3410)at   android.app.ActivityThread.performResumeActivity(ActivityThread.java:2817)   在   android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2859)

3 个答案:

答案 0 :(得分:0)

为什么首先保存并尝试显示已保存的图像文件。使用data中返回的onActivityResult。在文件实际在内存中创建之前,会发送广播,以便刷新目录并显示新文件。但更好的是使用相机意图作为数据返回的内容。

替换此代码

Bitmap myBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());

                        ImageView myImage = (ImageView) findViewById(R.id.imageView);

                        myImage.setImageBitmap(myBitmap);

用这个

ImageView myImage = (ImageView) findViewById(R.id.imageView);
Bitmap photo = (Bitmap) data.getExtras().get("data"); 
                myImage.setImageBitmap(photo);

答案 1 :(得分:0)

请仔细阅读本准则:

    public static final int REQUEST_IMAGE_CAPTURE = 1;
    public static final int RESULT_LOAD_IMAGE = 10;
     private Bitmap myBitmap;
     ImageView myImage ;
        public void OpenCam(View view) {

              Intent takePictureIntent = new             Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    if     (takePictureIntent.resolveActivity(getPackageManager()) != null) 
                    {

                        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
                    }
    }

而且,

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


        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) 
        {
            Bundle extras = data.getExtras();
            myBitmap= (Bitmap) extras.get("data");

             myImage = (ImageView) findViewById(R.id.imageView);

                    myImage.setImageBitmap(myBitmap);
        }

        if (requestCode == RESULT_LOAD_IMAGE && 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();

            myBitmap= BitmapFactory.decodeFile(picturePath);

            //          photoUri = picturePath;



        myImage.setImageBitmap(myBitmap);

        }

    }

答案 2 :(得分:0)

首先:评论该行   捕捉相机intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // no need to write

第二:使用此行

imageFile=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/abc); // abc folder name

而不是

imageFile=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"image.jpg");

注意:你的代码可以运行到kitkat,但棒棒糖会崩溃,因为在棒棒糖中,imageFile会返回null,因此Uri无法在文件中进行转换。希望你的问题能解决。在打开相机之前还有一件事你应该检查一下SD卡的许可。