bMon
bMon

Reputation: 962

Null pointer exception using camera intent when getData called

I am using this tutorial / code to learn the camera functions: cam tutorial.

The app is crashing after the camera Intent takes the picture and returns to onActivityResult. But I am checking the make sure data is not null:

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);
[...]

I get inside the data != null if statement and it crashes when I imageid = data.getData().getLastPathSegment();.

Logcat:

01-20 12:45:02.678: ERROR/AndroidRuntime(1626): FATAL EXCEPTION: main 01-20 12:45:02.678: ERROR/AndroidRuntime(1626): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {org.kimile/org.kimile.Camera}: java.lang.NullPointerException 01-20 12:45:02.678: ERROR/AndroidRuntime(1626): at android.app.ActivityThread.deliverResults(ActivityThread.java:3515) 01-20 12:45:02.678: ERROR/AndroidRuntime(1626): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 01-20 12:45:02.678: ERROR/AndroidRuntime(1626): at android.app.ActivityThread.access$2800(ActivityThread.java:125) 01-20 12:45:02.678: ERROR/AndroidRuntime(1626): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)

I can't figure out why its throwing the null exception even know I am checking to make sure its not null.

Upvotes: 0

Views: 5350

Answers (4)

Mayuresh Gawande
Mayuresh Gawande

Reputation: 197

On returning after capturing image using camera intent sometimes it does not returns us data so that you have to use

        Bundle extras = data.getExtras();

            Bitmap imageBitmap = (Bitmap) extras.get(TAG_data);

Upvotes: 0

Check for the resultCode and requestCode avoiding them if null
if (resultCode == RESULT_OK && data != null)

Upvotes: 0

Nanne
Nanne

Reputation: 64429

Well, if data is not null, data.getData() can still be null, and you can't call getLastPathSegment() on null. Maybe check that first, and if that's the case, maybe as @willytate commented, there is something wrong with the returned data?

Upvotes: 1

McStretch
McStretch

Reputation: 20675

Your code is throwing a NullPointerException because the object returned from data.getData() is null. Thus when you call getData().getLastPathSegment(), the method getLastPathSegment() is being called on a null object - giving you your NPE.

Like willytate said, if you want to avoid the problem all together make sure you check the value of resultCode. Otherwise, make sure you check if getData() is null as well.

Upvotes: 2

Related Questions