From 5dbd72f82af42292f0eb580a86df65b90307b446 Mon Sep 17 00:00:00 2001 From: Thomas Kuehne Date: Sun, 26 Apr 2026 09:00:56 +0000 Subject: [PATCH] Garmin: fix .FIT file summary creation when calculation results in infinity Example pace calculation when speed is exactly 0.0 m/s. `` Error saving specific samplesjava.lang.IllegalArgumentException: Infinity is not a valid double value as per JSON specification. To override this behavior, use GsonBuilder.serializeSpecialFloatingPointValues() method. at com.google.gson.Gson.checkValidFloatingPoint(Gson.java:508) at com.google.gson.Gson$1.write(Gson.java:470) at com.google.gson.Gson$1.write(Gson.java:453) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:73) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$2.write(ReflectiveTypeAdapterFactory.java:251) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:491) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:73) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:100) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:64) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:73) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$2.write(ReflectiveTypeAdapterFactory.java:251) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:491) at com.google.gson.TypeAdapter.toJsonTree(TypeAdapter.java:181) at com.google.gson.typeadapters.RuntimeTypeAdapterFactory$1.write(RuntimeTypeAdapterFactory.java:309) at com.google.gson.TypeAdapter$NullSafeTypeAdapter.write(TypeAdapter.java:304) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:73) at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:225) at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:161) at com.google.gson.Gson.toJson(Gson.java:943) at com.google.gson.Gson.toJson(Gson.java:898) at com.google.gson.Gson.toJson(Gson.java:847) at com.google.gson.Gson.toJson(Gson.java:824) at nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryData.toJson(ActivitySummaryData.java:195) at nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryData.toString(ActivitySummaryData.java:191) at nodomain.freeyourgadget.gadgetbridge.devices.garmin.GarminWorkoutParser.updateSummary(GarminWorkoutParser.java:1079) `` --- .../gadgetbridge/model/ActivitySummaryData.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryData.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryData.java index 556f92fb85..669101c61f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryData.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummaryData.java @@ -88,7 +88,11 @@ public class ActivitySummaryData { /// @return {@code true} if the value was actually added public boolean add(final String group, final String key, final Number value, final String unit, boolean forceDisplay) { - if (value != null && (value.doubleValue() != 0 || forceDisplay)) { + if (value == null || !Double.isFinite(value.doubleValue())) { + return false; + } + + if (value.doubleValue() != 0 || forceDisplay) { entries.put(key, new ActivitySummarySimpleEntry(group, value, unit)); return true; }