From b9993eae7b39f3e9dc5c5b2d8b11de9bec7e4025 Mon Sep 17 00:00:00 2001 From: DominicGBauer Date: Thu, 19 Sep 2024 16:19:12 +0200 Subject: [PATCH] fix: null pointer exception when sync has not happened yet --- .../com/powersync/db/PowerSyncDatabaseImpl.kt | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/core/src/commonMain/kotlin/com/powersync/db/PowerSyncDatabaseImpl.kt b/core/src/commonMain/kotlin/com/powersync/db/PowerSyncDatabaseImpl.kt index 6cee8ffc..97788328 100644 --- a/core/src/commonMain/kotlin/com/powersync/db/PowerSyncDatabaseImpl.kt +++ b/core/src/commonMain/kotlin/com/powersync/db/PowerSyncDatabaseImpl.kt @@ -301,15 +301,23 @@ internal class PowerSyncDatabaseImpl( private suspend fun updateHasSynced() { // Query the database to see if any data has been synced. - val timestamp = internalDb.getOptional("SELECT powersync_last_synced_at() as synced_at", null) { cursor -> - cursor.getString(0)!! - } + try { + val timestamp = internalDb.getOptional("SELECT powersync_last_synced_at() as synced_at", null) { cursor -> + cursor.getString(0)!! + } - val hasSynced = timestamp != null - if (hasSynced != currentStatus.hasSynced) { - val formattedDateTime = "${timestamp!!.replace(" ","T").toLocalDateTime()}Z" - val lastSyncedAt = Instant.parse(formattedDateTime) - currentStatus.update(hasSynced = hasSynced, lastSyncedAt = lastSyncedAt) + val hasSynced = timestamp != null + if (hasSynced != currentStatus.hasSynced) { + val formattedDateTime = "${timestamp!!.replace(" ","T").toLocalDateTime()}Z" + val lastSyncedAt = Instant.parse(formattedDateTime) + currentStatus.update(hasSynced = hasSynced, lastSyncedAt = lastSyncedAt) + } + } catch (e: Exception) { + if(e is NullPointerException) { + // No data has been synced which results in a null pointer exception + // and can be safely ignored. + return + } } }