From 6525a8ee8eac29e0651cc17ab5f079361362e739 Mon Sep 17 00:00:00 2001 From: Graham Jones Date: Sat, 28 May 2022 21:24:17 +0100 Subject: [PATCH] Fixed issue with quotes in seizure description crashing the app --- CHANGELOG.md | 4 ++ app/src/main/AndroidManifest.xml | 2 +- .../org/openseizuredetector/LogManager.java | 58 +++++++++++++------ 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1eec5c..f0ebdfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ OpenSeizureDetector Android App - Change Log ============================================ + + V4.0.5 - Added support for 3D data logging + - Fixed issue with seizure reporting crashing if quotation marks included in text. + V4.0.4 - Added support for Data Sharing system V3.6.2 - Nov 2020 - Extended Polish translation further - Improved system log output to help with answering queries from users. diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d8685c7..e6feeba 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" package="uk.org.openseizuredetector" android:versionCode="101" - android:versionName="4.0.5a"> + android:versionName="4.0.5b"> diff --git a/app/src/main/java/uk/org/openseizuredetector/LogManager.java b/app/src/main/java/uk/org/openseizuredetector/LogManager.java index 6c7f534..8d5c72f 100644 --- a/app/src/main/java/uk/org/openseizuredetector/LogManager.java +++ b/app/src/main/java/uk/org/openseizuredetector/LogManager.java @@ -204,14 +204,24 @@ public class LogManager { while (!c.isAfterLast()) { JSONObject event = new JSONObject(); try { - event.put("id", c.getString(c.getColumnIndex("id"))); - event.put("dataTime", c.getString(c.getColumnIndex("dataTime"))); - event.put("status", c.getString(c.getColumnIndex("status"))); - event.put("type", c.getString(c.getColumnIndex("type"))); - event.put("subType", c.getString(c.getColumnIndex("subType"))); - event.put("desc", c.getString(c.getColumnIndex("notes"))); - event.put("dataJSON", c.getString(c.getColumnIndex("dataJSON"))); - event.put("uploaded", c.getString(c.getColumnIndex("uploaded"))); + String val; + val = c.getString(c.getColumnIndex("id")); + // We replace null values with empty string, otherwise they are completely excluded from output JSON. + event.put("id", val==null ? "" : val ); + val = c.getString(c.getColumnIndex("dataTime")); + event.put("dataTime", val==null ? "" : val); + val = c.getString(c.getColumnIndex("status")); + event.put("status", val==null ? "" : val); + val = c.getString(c.getColumnIndex("type")); + event.put("type", val==null ? "" : val); + val = c.getString(c.getColumnIndex("subType")); + event.put("subType", val==null ? "" : val); + val = c.getString(c.getColumnIndex("notes")); + event.put("desc", val==null ? "" : val); + val = c.getString(c.getColumnIndex("dataJSON")); + event.put("dataJSON", val==null ? "" : val); + val = c.getString(c.getColumnIndex("uploaded")); + event.put("uploaded", val==null ? "" : val); c.moveToNext(); eventsArray.put(i, event); i++; @@ -315,17 +325,27 @@ public class LogManager { // Expects dataTime to be in format: SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Log.d(TAG, "createLocalEvent() - dataTime=" + dataTime + ", status=" + status + ", dataJSON="+dataJSON); // Write Event to database - String SQLStr = "INSERT INTO " + mEventsTableName - + "(dataTime, status, type, subtype, notes, dataJSON)" - + " VALUES(" - + "'" + dataTime + "'," - + status + "," - + "'" + type + "'," - + "'" + subType + "'," - + "'" + desc + "'," - + "'" + dataJSON + "'" - + ")"; - mOsdDb.execSQL(SQLStr); + //String SQLStr = "INSERT INTO " + mEventsTableName + // + "(dataTime, status, type, subtype, notes, dataJSON)" + // + " VALUES(" + // + "'" + dataTime + "'," + // + status + "," + // + "'" + type + "'," + // + "'" + subType + "'," + // + "'" + desc + "'," + // + "'" + dataJSON + "'" + // + ")"; + //mOsdDb.execSQL(SQLStr); + ContentValues values = new ContentValues(); + values.put("dataTime", dataTime); + values.put("status", status); + values.put("type", type); + values.put("subType",subType); + values.put("notes",desc); + values.put("dataJSON", dataJSON); + + long newRowId = mOsdDb.insert(mEventsTableName, null, values); + Log.d(TAG, "Created Row ID"+newRowId); return true; }