Phil Snell created CB-1212:
------------------------------

             Summary: When camera is started, and then cancelled with no photo, 
attempt to read exif data results in fatal error
                 Key: CB-1212
                 URL: https://issues.apache.org/jira/browse/CB-1212
             Project: Apache Cordova
          Issue Type: Bug
          Components: Android
    Affects Versions: 2.0.0
         Environment: Dell Streak device using SDK version 7 
            Reporter: Phil Snell
            Assignee: Joe Bowser


If you start the camera, it loads normally, and then when you click cancel 
right after that, it causes a fatal error. This is because it's trying to 
initialize the exif data, but no image exists. What ends up happening is an 
error when parseInt is called on null. Selected error messages:

E/AndroidRuntime(3206): Caused by: java.lang.NumberFormatException: unable to 
parse 'null' as integer
E/AndroidRuntime(3206): at 
org.apache.cordova.ExifHelper.getOrientation(ExifHelper.java:167)
E/AndroidRuntime(3206): at 
org.apache.cordova.CameraLauncher.onActivityResult(CameraLauncher.java:282)

I found a fix that works for me by editing CameraLauncher.onActivityResult. I 
moved the code that deals with exif to inside the conditional:

if (resultCode == Activity.RESULT_OK) {

because this is when you know there is an image available. Diff:

diff --git a/framework/src/org/apache/cordova/CameraLauncher.java 
b/framework/src/org/apache/cordova/CameraLauncher.java
index 6d05c64..48c5676 100755
--- a/framework/src/org/apache/cordova/CameraLauncher.java
+++ b/framework/src/org/apache/cordova/CameraLauncher.java
@@ -273,19 +273,22 @@ public class CameraLauncher extends Plugin implements 
MediaScannerConnectionClie
 
         // If CAMERA
         if (srcType == CAMERA) {
-            // Create an ExifHelper to save the exif data that is lost during 
compression
-            ExifHelper exif = new ExifHelper();
-            try {
-                if (this.encodingType == JPEG) {
-                    
exif.createInFile(DirectoryManager.getTempDirectoryPath(this.cordova.getActivity())
 + "/.Pic.jpg");
-                    exif.readExifData();
-                    rotate = exif.getOrientation();
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
+
             // If image available
             if (resultCode == Activity.RESULT_OK) {
+
+                // Create an ExifHelper to save the exif data that is lost 
during compression
+                ExifHelper exif = new ExifHelper();
+                try {
+                    if (this.encodingType == JPEG) {
+                        
exif.createInFile(DirectoryManager.getTempDirectoryPath(this.cordova.getActivity())
 + "/.Pic.jpg");
+                        exif.readExifData();
+                        rotate = exif.getOrientation();
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                
                 try {
                     Bitmap bitmap = null;
                     Uri uri = null;
 






--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to