Исключение нулевого указателя с использованием намерения камеры при вызове getData - PullRequest
0 голосов
/ 20 января 2011

Я использую этот урок / код для изучения функций камеры: урок по кулачкам.

Приложение вылетает после того, как камера намерена сделать снимок и вернуться к 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: ОШИБКА / AndroidRuntime (1626): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: главная 01-20 12: 45: 02.678: ОШИБКА / AndroidRuntime (1626): java.lang.RuntimeException: Ошибка доставкиresult ResultInfo {who = null, request = 1, result = -1, data = Intent {act = inline-data (with extras)}} в действие {org.kimile / org.kimile.Camera}: java.lang.NullPointerException01-20 12: 45: 02.678: ОШИБКА / AndroidRuntime (1626): на android.app.ActivityThread.deliverResults (ActivityThread.java:3515) 01-20 12: 45: 02.678: ОШИБКА / AndroidRuntime (1626): на Android.app.ActivityThread.handleSendResult (ActivityThread.java:3557) 01-20 12: 45: 02.678: ОШИБКА / AndroidRuntime (1626): в android.app.ActivityThread.access $ 2800 (ActivityThread.java:125) 01-20 12:45: 02.678: ОШИБКА / AndroidRuntime (1626): в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2063)

Я не могу понять, почему оно выдает исключение NULL, даже знаю, что я проверяю, чтобы убедиться, что оно не NULL.

Ответы [ 4 ]

2 голосов
/ 20 января 2011

Ваш код генерирует исключение NullPointerException, поскольку объект, возвращаемый из data.getData(), имеет значение null.Таким образом, когда вы вызываете getData().getLastPathSegment(), метод getLastPathSegment() вызывается для нулевого объекта - давая вам ваш NPE.

Как и willytate , если вы хотите избежать проблемывместе убедитесь, что вы проверили значение resultCode.В противном случае, убедитесь, что вы также проверили, является ли getData() нулевым.

1 голос
/ 20 января 2011

Что ж, если data не равно нулю, data.getData() все еще может быть нулевым, и вы не можете вызвать getLastPathSegment() при нулевом. Возможно, сначала проверьте это, и , если так, может быть, как прокомментировал @willytate, что-то не так с возвращенными данными?

0 голосов
/ 19 декабря 2015

При возврате после захвата изображения с намерением камеры иногда он не возвращает нам данные, поэтому вам нужно использовать

        Bundle extras = data.getExtras();

            Bitmap imageBitmap = (Bitmap) extras.get(TAG_data);
0 голосов
/ 20 апреля 2014

Проверка для resultCode и requestCode, избегая их, если нольif (resultCode == RESULT_OK && data != null)

...