调用getData时使用相机意图的空指针异常

时间:2011-01-20 18:05:13

标签: android null camera android-intent

我正在使用本教程/代码来学习相机功能: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异常甚至知道我正在检查以确保它不为空。

4 个答案:

答案 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);