我正在使用本教程/代码来学习相机功能:cam tutorial.
在相机Intent拍摄照片并返回onActivityResult
后,应用程序崩溃。但我正在检查确保数据不为空:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println("***** inside onActivityResult");
if (requestCode == TAKE_PICTURE) {
if (data != null) {
System.out.println("***** inside data !=null if");
imageid = data.getData().getLastPathSegment(); //returns full pic id
System.out.println("***** imageid:" + imageid);
[...]
我进入data != null
if语句,并在imageid = data.getData().getLastPathSegment();
时崩溃。
logcat的:
01-20 12:45:02.678:ERROR / AndroidRuntime(1626):致命异常:主要 01-20 12:45:02.678:ERROR / AndroidRuntime(1626):java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 1,result = -1,data = Intent {act = inline-data(有额外的}}}到activity {org.kimile / org.kimile.Camera}:java.lang.NullPointerException 01-20 12:45:02.678:ERROR / AndroidRuntime(1626):在android.app.ActivityThread.deliverResults(ActivityThread.java:3515) 01-20 12:45:02.678:ERROR / AndroidRuntime(1626):在android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 01-20 12:45:02.678:ERROR / AndroidRuntime(1626):在android.app.ActivityThread.access $ 2800(ActivityThread.java:125) 01-20 12:45:02.678:ERROR / AndroidRuntime(1626):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2063)
我无法弄清楚为什么它抛出null异常甚至知道我正在检查以确保它不为空。
答案 0 :(得分:2)
您的代码抛出了NullPointerException,因为从data.getData()
返回的对象为null。因此,当您调用getData().getLastPathSegment()
时,将在空对象上调用方法getLastPathSegment()
- 为您提供NPE。
喜欢 willytate 说,如果你想一起避免这个问题,请确保检查resultCode
的值。否则,请确保检查getData()
是否也为空。
答案 1 :(得分:1)
好吧,如果data
不为空,data.getData()
仍然可以为空,并且您无法在null上调用getLastPathSegment()
。也许首先检查一下, if 就是这种情况,也许@willytate评论说,返回的数据有问题吗?
答案 2 :(得分:0)
检查resultCode和requestCode,如果为null则避免它们
if (resultCode == RESULT_OK && data != null)
答案 3 :(得分:0)
在使用相机意图捕获图像后返回有时它不会返回我们的数据,因此您必须使用
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get(TAG_data);