我在Stack Overflow上研究了很多,但问题仍然存在。我有一个main
活动,它要求startActivityForResult
我的takeapicture
活动。这是我在takeapicture
中的代码,返回结果:
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
pictureFile = null;
try {
pictureFile = createImageFile(1);
} catch (Exception e) {System.out.println(e.getCause());
System.out.println("lol");}
if (pictureFile == null){
System.out.println("lol");
return;
}
try {
System.out.println(Arrays.toString(data));
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
System.out.println(e.getCause());
} catch (IOException e) {
System.out.println(e.getCause());
}
System.out.println(pictureFile.getAbsoluteFile());
Intent intent = new Intent();
intent.putExtra("SavedImageDirectory", pictureFile);
setResult(RESULT_OK, intent);
finish();
}
};
运行此功能时,我在使用额外SavedImageDirectory
的第一行收到以下错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{...
...
Caused by: java.lang.NullPointerException
....
看起来额外的东西有null
,但我看不出它在哪里会出错。有什么提示吗?提前谢谢。
你如何阅读额外的,getStringExtra() ? 这可能是问题所在,因为您正在该额外内容中设置一个 File 对象,因此将值作为 String Extra 获取将为 NULL。
我不确定,但我认为putExtra("",File)
将是putExtra()
的Serializable value
版本,因此您需要将其getSerializableExtra()
阅读,或者只是在额外的中添加文件名
i.putExtra("SavedImageDirectory", pictureFile.getAbsolutePath());
或者更具体地说,您也可以添加文件名
i.putExtra("SavedImageDirectory", pictureFile.getAbsolutePath() + pictureFile.getName());
这样,您可以将其作为额外字符串阅读。
Intent.putExtra(name, value) 上的所有文档都说"name"应该包含一个包前缀,而不仅仅是像"SavedImageDirectory"这样的字符串。