in my application,i am using android devices camera to capture an image. for some devices it works fine but some are not. I just tested it on LG nexus 4 E960, after i captured the image my application went crash without able to save the result. this is my code:
//Using intent to open camera
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,CAMERA_CAPTURE);
in the activityResult :
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(resultCode==RESULT_OK)
{
if(requestCode==CAMERA_CAPTURE)
{
Bitmap pictTaken = null ;
Bundle extras = data.getExtras();
if(extras.keySet().contains("data"))
{
pictTaken = (Bitmap) extras.get("data");
picUri = getIntent().getData();
}
else{
picUri = getIntent().getData();
try {
pictTaken = decodeUri(picUri);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Intent cropIntent= new Intent (this, Crop.class);
cropIntent.putExtra("data", picUri.toString());
cropIntent.putExtra("pict", pictTaken);
cropIntent.putExtra("code","camera");
startActivity(cropIntent);
}
}
after captured and save it, the image show in next activity called Crop.class here is my logcat
12-12 13:26:36.340: E/AndroidRuntime(23575): FATAL EXCEPTION: main
12-12 13:26:36.340: E/AndroidRuntime(23575): Process: com.example.cobaandroid, PID: 23575
12-12 13:26:36.340: E/AndroidRuntime(23575): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.example.cobaandroid/com.example.cobaandroid.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.toString()' on a null object reference
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.app.ActivityThread.deliverResults(ActivityThread.java:3368)
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3411)
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.app.ActivityThread.access$1300(ActivityThread.java:138)
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.os.Handler.dispatchMessage(Handler.java:102)
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.os.Looper.loop(Looper.java:136)
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.app.ActivityThread.main(ActivityThread.java:5050)
12-12 13:26:36.340: E/AndroidRuntime(23575): at java.lang.reflect.Method.invoke(Native Method)
12-12 13:26:36.340: E/AndroidRuntime(23575): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-12 13:26:36.340: E/AndroidRuntime(23575): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-12 13:26:36.340: E/AndroidRuntime(23575): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.toString()' on a null object reference
12-12 13:26:36.340: E/AndroidRuntime(23575): at com.example.cobaandroid.MainActivity.onActivityResult(MainActivity.java:226)
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.app.Activity.dispatchActivityResult(Activity.java:5433)
12-12 13:26:36.340: E/AndroidRuntime(23575): at android.app.ActivityThread.deliverResults(ActivityThread.java:3364)
12-12 13:26:36.340: E/AndroidRuntime(23575): ... 9 more
I got a problem to open/use the camera that work at most android devices, the main goal of this project is heavily depend on the use of the camera. please hand me your help, thank you..
You have to tell camera for saving image path like below:
Try this one
See I've done one more thing may be it will save your time. The thing is that the data object in onActivityResult() is the main content to look upon. The data object is being null when it comes to operate the p=code for the next move. What you'll do is to just put if-else condition on that and run your project.
Check this out, it is easy and will do your work in a go.
For those who couldn't solve this issue with any of the answers here, here is the way.
You have a member
picUri
in which you save the temporary image file URI before thestartActivityForResult
is called for launching the Camera app.When the app pauses, this information might get lost (as in my case) and you will find it as
null
when you return to activity to use it to get the saved image from camera.Then, you will get
NullPointerException
.The proper way to keep
picUri
is to save itonSaveInstanceState(Bundle)
and restore itonRestoreInstanceState(Bundle)
to prevent information loss.Here is how to do it:
Gave me a headache for two hours.
in some devices onActivityResult is called not on activity resume instead the activity is restarted after callback from camera intent, so picurl can be null again - we can use the application class to keep reference of the variable
We can create our own application class
1.in android manifest we have to Specify the application class we are going to use
2.Create the Application Class
3.Inside the Activity use
try below code,
where getOutputMediaFile(int) will be,
and finally,
Cheers....:)