OpenSeizureDetector / Android_Pebble_SD

The main OpenSeizureDetector Android App, that is published on the Android Play Store.
http://openseizuredetector.org.uk
GNU General Public License v3.0
9 stars 11 forks source link

V4.1.7 - LogManager Crash #102

Closed jones139 closed 1 year ago

jones139 commented 1 year ago

User Reported crash: Crash Report:

Error Report collected on : Fri Jun 16 01:39:05 GMT+02:00 2023

System Information : Locale: en_US Version: 4.1.7 Package: uk.org.openseizuredetector Phone Model: SM-A336B Android Version: 13 Board: s5e8825 Brand: samsung Device: a33x Host: SWDK6923 ID: TP1A.220624.014 Model: SM-A336B Product: a33xnseea Type: user Total Internal memory: 114238140416 Available Internal memory: 82960121856

Stack Trace: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference at uk.org.openseizuredetector.LogManager$1.lambda$accept$0$uk-org-openseizuredetector-LogManager$1(LogManager.java:977) at uk.org.openseizuredetector.LogManager$1$$ExternalSyntheticLambda0.accept(Unknown Source:4) at uk.org.openseizuredetector.LogManager.lambda$getDatapointsByDate$0$uk-org-openseizuredetector-LogManager(LogManager.java:475) at uk.org.openseizuredetector.LogManager$$ExternalSyntheticLambda5.accept(Unknown Source:4) at uk.org.openseizuredetector.LogManager$SelectQueryTask.onPostExecute(LogManager.java:753) at uk.org.openseizuredetector.LogManager$SelectQueryTask.onPostExecute(LogManager.java:700) at android.os.AsyncTask.finish(AsyncTask.java:771) at android.os.AsyncTask.-$$Nest$mfinish(Unknown Source:0) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8757) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

* End of current Report

jones139 commented 1 year ago

It looks like a crash caused by getDatapointsByDate returning null rather than a list of datapoints.

We can easily fix it to handle the null data return gracefully, but I am curious about why we did a query that resulted in no data being returned - so that needs to be looked at too.

jones139 commented 1 year ago

I think it was an unlucky race condition where finishUpload had set mDataPointsToUploadLst to null before we had written the message saying how many data points there were to upload. Fixed with a check that mDataPointsToUploadLst is not null before trying to retrieve its size.

jones139 commented 1 year ago

Fix included in V4.1.8