我正在使用此代码创建一个简单的相机应用程序 . 我可以拍张照片 . 但是,拍摄照片后应用程序崩溃了 .
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File imageFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "abc.jpg");
Uri store= Uri.fromFile(imageFile);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, store);
intent.putExtra(android.provider.MediaStore.EXTRA_VIDEO_QUALITY, 0);
startActivityForResult(intent, 0);
}
/ ********* ********* onActivityResult ************ /
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
switch (resultCode) {
case Activity.RESULT_OK:
if (imageFile.exists())
{
Toast.makeText(this, "The file was saved at " + imageFile.getAbsolutePath(), Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "Error saving the file ", Toast.LENGTH_LONG).show();
}
break;
case Activity.RESULT_CANCELED:
break;
default:
break;
}
}
}
下面是logcat .
java.lang.RuntimeException:将结果ResultInfo {who = null,request = 0,result = -1,data = null}传递给activity {com.camera/com.camera.MainActivity}失败:java.lang.NullPointerException:Attempt在android.app.ActivityThread.handleSendResult(ActivityThread.java:3801)的android.app.ActivityThread.deliverResults(ActivityThread.java:3758)上的空对象引用上调用虚方法'boolean java.io.File.exists()' )在Android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread.access $ 1400(ActivityThread.java:157)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1405) android.os.Looper.loop(Looper.java:148)位于com.android.internal的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5551) . os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:730)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)引起:java.lang.NullPointerException:尝试调用虚方法android上的android.app.Activity.dispatchActivityResult(Activity.java:6463)中的com.camera.MainActivity.onActivityResult(MainActivity.java:43)上的空对象引用上的'boolean java.io.File.exists()' . android.app.ActivityThread $的android.app.ActivityThread.access $ 1400(ActivityThread.java:157)上的android.app.ActivityThread.handleSendResult(ActivityThread.java:3801)app.ActivityThread.deliverResults(ActivityThread.java:3754) 2.handleMessage(ActivityThread.java:1405)位于android.app.AtoT.Thread.main(ActivityThread)的android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:148) .java:5551)位于com.android.internal.os.ZygoteInit的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:730)的java.lang.reflect.Method.invoke(Native Method) . 主要(ZygoteInit.java:620)
我无法弄清楚为什么会这样 . 有谁知道我该如何修复错误?谢谢!
4 回答
当用户从“相机”单击操作导航回“活动”时,将重新创建“活动” .
因此,您需要将文件路径存储在
onSaveInstanceState()
中的Bundle中(确保在outState
Bundle
上调用putString
后调用super.onSaveInstanceState(outState);
),然后在onRestoreInstanceState()
内再次创建文件 .请检查您的应用中是否配置了相应的权限
AndroidManifest.xml
(
READ_EXTERNAL_STORAGE
和/或WRITE_EXTERNAL_STORAGE
)您可以尝试从
Intent
参数中检索图像URI:我唯一能想到的是你有两个
imageFile
变量,一个是你在intent中定义和发送的变量,另一个是imageFile
全局变量,总是为null .这段代码很完美: