Skip to content

Commit 9e2d55f

Browse files
committed
Fix NoSuchFieldException on Android 16 #22
1 parent de11ff9 commit 9e2d55f

2 files changed

Lines changed: 10 additions & 5 deletions

File tree

app/src/main/java/com/rafapps/taskerhealthconnect/aggregated/ReadAggregatedDataActionRunner.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ import com.rafapps.taskerhealthconnect.Serializer
1515
import com.rafapps.taskerhealthconnect.healthConnectRecordsPackage
1616
import kotlinx.coroutines.runBlocking
1717
import java.time.Instant
18+
import kotlin.reflect.full.companionObject
19+
import kotlin.reflect.full.companionObjectInstance
20+
import kotlin.reflect.full.memberProperties
1821

1922
class ReadAggregatedDataActionRunner(
2023
private val repositoryProvider: HealthConnectRepositoryProvider = { HealthConnectRepository(it) },
@@ -37,9 +40,11 @@ class ReadAggregatedDataActionRunner(
3740
val startTime = Instant.ofEpochMilli(input.regular.startTime.toLong())
3841
val endTime = Instant.ofEpochMilli(input.regular.endTime.toLong())
3942
val split = input.regular.aggregateMetric.split(".")
40-
val clazz = Class.forName("$healthConnectRecordsPackage.${split[0]}")
41-
val field = clazz.getField(split[1])
42-
val metric = field.get(null) as AggregateMetric<*>
43+
val kClass = Class.forName("$healthConnectRecordsPackage.${split[0]}").kotlin
44+
val companionObject = kClass.companionObject
45+
val companionInstance = kClass.companionObjectInstance
46+
val property = companionObject?.memberProperties?.find { it.name == split[1] }
47+
val metric = property?.call(companionInstance) as AggregateMetric<*>
4348
val data = runBlocking { repository.readAggregatedData(metric, startTime, endTime) }
4449
val serializedResult = serializer.toString(data)
4550
Log.d(tag, "runner complete, result size: ${serializedResult.length}")

app/src/test/resources/output/SkinTemperatureRecord.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
"deltas": [
1010
{
1111
"delta": {
12-
"celsius": 1.0,
13-
"fahrenheit": 1.8
12+
"celsius": 10.0,
13+
"fahrenheit": 18.0
1414
},
1515
"time": 1746800000000
1616
}

0 commit comments

Comments
 (0)