1

I have an app and I need to take photos and then upload it to firebase. I basically need Uri path of the photo taken.

I read Get file path of image on Android, but I have a problem with NullPointerException.

Main difference between my problem and the problem above is that I'm doing it in a Fragment.

Here is my code:

mTakePhotoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
        }
    });

I get NullPointerException in line with Uri imgUri.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            mImgView.setImageBitmap(photo);
            Uri imgUri = getImageUri(getActivity().getApplicationContext(), photo);
            mManager.setPhotoUri(imgUri);
        }
}

And here is the method I use to get Uri.

private Uri getImageUri(Context inContext, Bitmap inImage) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
        return Uri.parse(path);
    }

The exact error message is:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:1, request=22222, result=-1, data=Intent { act=inline-data (has extras) }} to activity {.MainActivity}: java.lang.NullPointerException: uriString

I would appreciate any help.

The entire error log:

09-14 12:06:18.448 16497-16497/com.example.radzik.recipes E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.radzik.recipes, PID: 16497 java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:1, request=22222, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.example.radzik.recipes/com.example.radzik.recipes.activity.MainActivity}: java.lang.NullPointerException: uriString at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.NullPointerException: uriString at android.net.Uri$StringUri.(Uri.java:475) at android.net.Uri$StringUri.(Uri.java) at android.net.Uri.parse(Uri.java:437) at com.example.radzik.recipes.fragment.ChoosePhotoFragment.getImageUri(ChoosePhotoFragment.java:144) at com.example.radzik.recipes.fragment.ChoosePhotoFragment.onActivityResult(ChoosePhotoFragment.java:135) at android.app.Activity.dispatchActivityResult(Activity.java:6452) at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)  at android.app.ActivityThread.-wrap16(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Radzik
  • 244
  • 2
  • 16

1 Answers1

1

Your problem is with getActivity() becasue you are getting the intent of the current activity you were on which will fail. So if you move your code to the OnActivityResult this will make it work.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //first call super
    super.onActivityResult(requestCode, resultCode, data);

    //rest of your code
}

Don't forget to add

<uses-permission android:name="android.permission.CAMERA" />

and/or without depends on your app

<uses-feature android:name="android.hardware.camera" />
Yamen Nassif
  • 2,416
  • 2
  • 24
  • 48