Complete

WERETECH-9596

Cannot Reproduce

SDK 3.2.1 vs SDK 3.1.9 Runtime Error?

Can anyone shed any light on why the code snippet below works fine on SDK 3.1.9 but fails with the error below with SDK 3.2.1.  The last line of code relates to the first error in the list.

private var heartRateZoneDisplayRatio = 0.0;

function initialize() {
    var profile = UserProfile.getProfile();
    var currentSport = profile.getCurrentSport();
    heartRateZones = profile.getHeartRateZones(currentSport);

    //work out the ratio to move the ticker for increase in 1 beat
    heartRateZoneDisplayRatio = 250 / (heartRateZones[5] - heartRateZones[0]).toFloat();
}

Error: Invalid Value
Details: Failed invoking <symbol>
Stack:
- initialize() at C:\Garmin\Git\datafields\Multi\01-BaseMulti\source\BaseMultiView.mc:9 0x10001320
- initialize() at C:\Garmin\Git\datafields\Multi\20-ConfigMulti\source\ConfigMultiView.mc:19 0x10000077
- getInitialView() at C:\Garmin\Git\datafields\Multi\20-ConfigMulti\source\ConfigMultiApp.mc:25 0x1000005e

Parents
  • Two things.

    First, I can't reproduce the problem with the 3.2.1 or 3.2.2 SDKs. Here is my test code.

    class HeartRateZonesApp extends Application.AppBase {
    
        function initialize() {
            AppBase.initialize();
        }
    
        function onStart(state) {
            var sports = [
                UserProfile.HR_ZONE_SPORT_GENERIC,
                UserProfile.HR_ZONE_SPORT_RUNNING,
                UserProfile.HR_ZONE_SPORT_BIKING,
                UserProfile.HR_ZONE_SPORT_SWIMMING,
            ];
    
            for (var i = 0; i < sports.size(); ++i) {
                var heartRateZones = UserProfile.getHeartRateZones(sports[i]);
                System.println(heartRateZones);
            }
    
            // your code
            var profile = UserProfile.getProfile();
            var currentSport = profile.getCurrentSport();
            var heartRateZones = profile.getHeartRateZones(currentSport);
            System.println(heartRateZones);
        }
        
        // ...
    }
    

    That code generates this output in the simulator.

    [93, 111, 130, 148, 167, 185]
    [93, 111, 130, 148, 167, 185]
    [93, 111, 130, 148, 167, 185]
    [93, 111, 130, 148, 167, 185]
    [93, 111, 130, 148, 167, 185]

    The second issue is that your code is doing something weird and getting away with it. The UserProfile.Profile object returned by getProfile() is just a class with data; it has no functions. You are calling getHeartRateZones on that object.

    var heartRateZones = profile.getHeartRateZones(currentSport);

Comment
  • Two things.

    First, I can't reproduce the problem with the 3.2.1 or 3.2.2 SDKs. Here is my test code.

    class HeartRateZonesApp extends Application.AppBase {
    
        function initialize() {
            AppBase.initialize();
        }
    
        function onStart(state) {
            var sports = [
                UserProfile.HR_ZONE_SPORT_GENERIC,
                UserProfile.HR_ZONE_SPORT_RUNNING,
                UserProfile.HR_ZONE_SPORT_BIKING,
                UserProfile.HR_ZONE_SPORT_SWIMMING,
            ];
    
            for (var i = 0; i < sports.size(); ++i) {
                var heartRateZones = UserProfile.getHeartRateZones(sports[i]);
                System.println(heartRateZones);
            }
    
            // your code
            var profile = UserProfile.getProfile();
            var currentSport = profile.getCurrentSport();
            var heartRateZones = profile.getHeartRateZones(currentSport);
            System.println(heartRateZones);
        }
        
        // ...
    }
    

    That code generates this output in the simulator.

    [93, 111, 130, 148, 167, 185]
    [93, 111, 130, 148, 167, 185]
    [93, 111, 130, 148, 167, 185]
    [93, 111, 130, 148, 167, 185]
    [93, 111, 130, 148, 167, 185]

    The second issue is that your code is doing something weird and getting away with it. The UserProfile.Profile object returned by getProfile() is just a class with data; it has no functions. You are calling getHeartRateZones on that object.

    var heartRateZones = profile.getHeartRateZones(currentSport);

Children