codinguser / gnucash-android

Gnucash for Android mobile companion application.
Apache License 2.0
1.23k stars 540 forks source link

OFX export fails with FileNotFoundException #448

Closed rivaldi8 closed 8 years ago

rivaldi8 commented 8 years ago

Exporting transactions in OFX format fail if there's a difference in the wall clock time between the start and end of the export.

E/ExportAsyncTask: /data/data/org.gnucash.android.devel/cache/OFX/20151204_175635_gnucash_export.ofx (No such file or directory)
E/SchedulerService: org.gnucash.android.export.Exporter$ExporterException: Failed to generate Open Financial eXchange-/data/data/org.gnucash.android.devel/cache/OFX/20151204_175635_gnucash_export.ofx (No such file or directory)
W/dalvikvm: threadid=17: thread exiting with uncaught exception (group=0x401e1560)
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
                  java.lang.RuntimeException: An error occured while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:200)
                      at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
                      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:138)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
                      at java.lang.Thread.run(Thread.java:1019)
                   Caused by: org.gnucash.android.export.Exporter$ExporterException: Failed to generate Open Financial eXchange-/data/data/org.gnucash.android.devel/cache/OFX/20151204_175635_gnucash_export.ofx (No such file or directory)
                      at org.gnucash.android.export.ExportAsyncTask.moveExportToSDCard(ExportAsyncTask.java:355)
                      at org.gnucash.android.export.ExportAsyncTask.doInBackground(ExportAsyncTask.java:184)
                      at org.gnucash.android.export.ExportAsyncTask.doInBackground(ExportAsyncTask.java:79)
                      at android.os.AsyncTask$2.call(AsyncTask.java:185)
                      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
                      at java.lang.Thread.run(Thread.java:1019) 
                   Caused by: java.io.FileNotFoundException: /data/data/org.gnucash.android.devel/cache/OFX/20151204_175635_gnucash_export.ofx (No such file or directory)
                      at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
                      at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
                      at java.io.FileInputStream.<init>(FileInputStream.java:80)
                      at org.gnucash.android.export.ExportAsyncTask.moveFile(ExportAsyncTask.java:457)
                      at org.gnucash.android.export.ExportAsyncTask.moveExportToSDCard(ExportAsyncTask.java:350)
                      at org.gnucash.android.export.ExportAsyncTask.doInBackground(ExportAsyncTask.java:184) 
                      at org.gnucash.android.export.ExportAsyncTask.doInBackground(ExportAsyncTask.java:79) 
                      at android.os.AsyncTask$2.call(AsyncTask.java:185) 
                      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
                      at java.lang.Thread.run(Thread.java:1019) 

It happens when the second call to Export.getExportCacheFilePath() in OfxExporter.generateExport() returns a file name with a time stamp different to the first call in the same method. The root of the problem is getExportCacheFilePath(), which builds the file name with the current time.

Received through Crashlitics as issue #129.

rivaldi8 commented 8 years ago

I'm preparing a fix.

codinguser commented 8 years ago

Cool. Looking forward. Please send it to hotfix/patches On Dec 5, 2015 19:25, "Àlex Magaz Graça" notifications@github.com wrote:

I'm preparing a fix.

— Reply to this email directly or view it on GitHub https://github.com/codinguser/gnucash-android/issues/448#issuecomment-162232613 .