Thomas Kuehne
2026-04-26 07:58:35 +00:00
parent 3623dde207
commit 16b29bd09d
@@ -174,7 +174,16 @@ public class RecordData {
}
public <T> T getFieldByNumber(int number, final Class<T> clazz) {
return safeCast(getFieldByNumber(number), clazz);
Object object = getFieldByNumber(number);
if (object == null)
return null;
// when CIQ fields are used value arrays instead of single values are sometimes recorded
if (!clazz.isArray() && object.getClass().isArray() && 0 < Array.getLength(object)) {
object = Array.get(object, 0);
}
return safeCast(object, clazz);
}
public <T> T[] getArrayFieldByNumber(int number, final Class<T> clazz) {
@@ -215,6 +224,18 @@ public class RecordData {
return clazz.cast(object);
}
if(object instanceof Number number){
// some older Garmin devices encoded e.g.
// [distance] and [enhanced_speed] as float instead of double
// [cadence] as float instead of integer
if(clazz.equals(Double.class)){
return clazz.cast(number.doubleValue());
}
if(clazz.equals(Integer.class)){
return clazz.cast(number.intValue());
}
}
LOG.error(
"Unable to cast {} ({}) to {}, returning null - this is likely a bug. Record: {}",
object,