Android-XML-to-PDF-Generator
Android-XML-to-PDF-Generator copied to clipboard
Crash when saving is cancelled
The library throws a Null Pointer exception if the save process is interrupted(rather than saving the file, press the back button).
Exception Recieved
java.lang.RuntimeException: Unable to resume activity {--projectActivity--}: java.lang.NullPointerException: uri at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3672) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3712) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1679) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6626) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811) Caused by: java.lang.NullPointerException: uri at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:128) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1227) at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:1100) at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:1054) at com.gkemon.XMLtoPDF.PdfGenerator$Builder.writePDFOnSavedBlankPDFFile(PdfGenerator.java:445) at com.gkemon.XMLtoPDF.PdfGenerator$Builder.lambda$print$0$com-gkemon-XMLtoPDF-PdfGenerator$Builder(PdfGenerator.java:422) at com.gkemon.XMLtoPDF.PdfGenerator$Builder$$ExternalSyntheticLambda1.onBlankPDFCreatedInSharedStorage(Unknown Source:4) at com.gkemon.XMLtoPDF.PdfGenerator$XmlToPDFLifecycleObserver.lambda$onCreate$0$com-gkemon-XMLtoPDF-PdfGenerator$XmlToPDFLifecycleObserver(PdfGenerator.java:696) at com.gkemon.XMLtoPDF.PdfGenerator$XmlToPDFLifecycleObserver$$ExternalSyntheticLambda0.onActivityResult(Unknown Source:4) at androidx.activity.result.ActivityResultRegistry$1.onStateChanged(ActivityResultRegistry.java:149) at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:360) at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:271) at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:313) at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:151) at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134) at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:68) at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:144) at androidx.lifecycle.ReportFragment.onStart(ReportFragment.java:109) at android.app.Fragment.performStart(Fragment.java:2534) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1315) at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1557) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1618) at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3027) at android.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:2984) at android.app.FragmentController.dispatchStart(FragmentController.java:189) at android.app.Activity.performStart(Activity.java:7058) at android.app.Activity.performRestart(Activity.java:7127) at android.app.Activity.performResume(Activity.java:7132) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3647) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3712) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1679) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6626) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
@anupam858 it will be handled and will show the proper message while leaving it from saving. Actually, it generates sometimes when context is null and it actually depends on device. So user need to handle this case from the app level i think. I might be wrong and if you get some good idea please share with me