Drjacky / ImagePicker

📸Image Picker for Android, Pick images from Gallery or Capture a new image with Camera🖼
https://github.com/Drjacky/ImagePicker
Apache License 2.0
230 stars 57 forks source link

Caused by java.io.IOException No such file or directory #68

Closed ViacheslavSiz closed 2 years ago

ViacheslavSiz commented 2 years ago

Crash from crashlytics. Happened on any version of Android from 8 to 12. At least on Samsung and Xiaomi device. Can not reproduce, only logs.

Expected behavior No crashes while using library.

Deps: implementation "com.github.Drjacky:ImagePicker:2.1.15"

Additional context

Caused by java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively0(UnixFileSystem.java) at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317) at java.io.File.createNewFile(File.java:1008) at com.github.drjacky.imagepicker.provider.CropProvider.convertBitmapToFile(CropProvider.java:202) at com.github.drjacky.imagepicker.provider.CropProvider.cropImage(CropProvider.java:138) at com.github.drjacky.imagepicker.provider.CropProvider.startIntent(CropProvider.java:112) at com.github.drjacky.imagepicker.ImagePickerActivity.setImage(ImagePickerActivity.kt:162) at com.github.drjacky.imagepicker.provider.GalleryProvider.handleResult(GalleryProvider.java:154) at com.github.drjacky.imagepicker.provider.GalleryProvider.handleResult(GalleryProvider.java:142) at com.github.drjacky.imagepicker.ImagePickerActivity.galleryLauncher$lambda-0(ImagePickerActivity.java:50) at com.github.drjacky.imagepicker.ImagePickerActivity$$InternalSyntheticLambda$0$ff25cd6acd5d528883fa7453e727b5645f3c82cd9381ba0e6ee4faa9e1498070$0.onActivityResult$bridge(ImagePickerActivity.java:14) at androidx.activity.result.ActivityResultRegistry$1.onStateChanged(ActivityResultRegistry.java:148) at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354) at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265) at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307) at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148) at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134) at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:68) at androidx.lifecycle.ReportFragment$LifecycleCallbacks.onActivityPostStarted(ReportFragment.java:187) at android.app.Activity.dispatchActivityPostStarted(Activity.java:1396) at android.app.Activity.performStart(Activity.java:8268) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3845) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2309) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8587) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

convertBitmapToFile has createNewFile invocation, but no where handling exception. cropImage inside CropProvider marked with @Throws(IOException::class), but the only place who call it

   fun startIntent(
        uri: Uri,
        cropOval: Boolean,
        cropFreeStyle: Boolean,
        isCamera: Boolean
    ) {
        cropImage(uri, cropOval, cropFreeStyle, isCamera)
    }

and there is not exception handling.

Drjacky commented 2 years ago

It has been fixed on 2.1.16. Please let me know if it didn't help and you still get the crash on those devices.