我是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)
答案 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卡的许可。