You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by GitBox <gi...@apache.org> on 2020/12/30 21:57:24 UTC

[GitHub] [cordova-plugin-camera] PieterVanPoyer commented on issue #665: App crashes randomly after taking a picture with the camera

PieterVanPoyer commented on issue #665:
URL: https://github.com/apache/cordova-plugin-camera/issues/665#issuecomment-752770761


   Maybe we should just focus on Android on this issue.
   I think the issue is related to the activity being destroyed when the camera opens. (So it is probably also related to https://github.com/apache/cordova-plugin-camera/issues/696 ).
   
   My first guess is: 
   In the onSaveInstanceState the imageFilePath is saved to the Bundle (with the IMAGE_URI key).
   But in the onRestoreStateForActivityResult the IMAGE_URI value is set on imageUri. (So there is a switch).
   When the activity has been destroyed the imageFilePath is normally set to null.
   
   ```
   onSaveInstanceState 
   
   if (this.imageUri != null) {
       state.putString(IMAGE_URI_KEY, this.imageFilePath);
   }
   ```
   
   and
   ```
   onRestoreStateForActivityResult 
   
   if (state.containsKey(IMAGE_URI_KEY)) {
       //I have no idea what type of URI is being passed in
       this.imageUri = Uri.parse(state.getString(IMAGE_URI_KEY));
   }
   ```
   
   When processing the result, the plugin uses the null imageFilePath.
   
   ![image](https://user-images.githubusercontent.com/33040889/103383039-8bebeb00-4af1-11eb-8891-45407e8590ce.png)
   
   So maybe just storing and restoring imageUri and imageFilePath seperatly in the onSaveInstance and onRestore methods is enough.
   
   This is the stacktrace from my testing app https://github.com/PieterVanPoyer/cordova-camera-plugin-testing-app when the activity in the emulator is configured to be always destroyed when the camera opens.
   
   ```
   2020-12-30 22:42:41.774 11147-11147/com.pvpoyer.cameraplugintesting E/AndroidRuntime: FATAL EXCEPTION: main
       Process: com.pvpoyer.cameraplugintesting, PID: 11147
       java.lang.RuntimeException: Unable to resume activity {com.pvpoyer.cameraplugintesting/com.pvpoyer.cameraplugintesting.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=34, result=-1, data=Intent {  }} to activity {com.pvpoyer.cameraplugintesting/com.pvpoyer.cameraplugintesting.MainActivity}: java.lang.NullPointerException: filename cannot be null
           at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4444)
           at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4476)
           at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
           at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
           at android.os.Handler.dispatchMessage(Handler.java:106)
           at android.os.Looper.loop(Looper.java:223)
           at android.app.ActivityThread.main(ActivityThread.java:7656)
           at java.lang.reflect.Method.invoke(Native Method)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
        Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=34, result=-1, data=Intent {  }} to activity {com.pvpoyer.cameraplugintesting/com.pvpoyer.cameraplugintesting.MainActivity}: java.lang.NullPointerException: filename cannot be null
           at android.app.ActivityThread.deliverResults(ActivityThread.java:5015)
           at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4431)
           at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4476) 
           at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) 
           at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) 
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
           at android.os.Handler.dispatchMessage(Handler.java:106) 
           at android.os.Looper.loop(Looper.java:223) 
           at android.app.ActivityThread.main(ActivityThread.java:7656) 
           at java.lang.reflect.Method.invoke(Native Method) 
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
        Caused by: java.lang.NullPointerException: filename cannot be null
           at android.media.ExifInterface.<init>(ExifInterface.java:1498)
           at org.apache.cordova.camera.ExifHelper.createInFile(ExifHelper.java:56)
           at org.apache.cordova.camera.CameraLauncher.processResultFromCamera(CameraLauncher.java:481)
           at org.apache.cordova.camera.CameraLauncher.onActivityResult(CameraLauncher.java:828)
           at org.apache.cordova.CordovaInterfaceImpl.onActivityResult(CordovaInterfaceImpl.java:159)
           at org.apache.cordova.CordovaActivity.onActivityResult(CordovaActivity.java:361)
           at android.app.Activity.dispatchActivityResult(Activity.java:8310)
           at android.app.ActivityThread.deliverResults(ActivityThread.java:5008)
           at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4431) 
           at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4476) 
           at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) 
           at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) 
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
           at android.os.Handler.dispatchMessage(Handler.java:106) 
           at android.os.Looper.loop(Looper.java:223) 
           at android.app.ActivityThread.main(ActivityThread.java:7656) 
           at java.lang.reflect.Method.invoke(Native Method) 
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
   ```


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org