What does "ERROR: System Error" mean?

I'm getting these errors from my alpha tester in CIQ_LOG.txt .
ERROR: System Error
DETAILS: Failed invoking <symbol>
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
C:\alan\projects\raceQsGarmin\raceQs\source\db_navigation.mc (onUpdate:111)

ERROR: System Error
DETAILS: Failed invoking <symbol>
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
C:\alan\projects\raceQsGarmin\raceQs\source\engine.mc (dispData:1143)
C:\alan\projects\raceQsGarmin\raceQs\source\engine.mc (GPSData:833)

ERROR: System Error
DETAILS: Failed invoking <symbol>
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
C:\alan\projects\raceQsGarmin\raceQs\source\engine.mc (checkForMarkRounding:1830)
C:\alan\projects\raceQsGarmin\raceQs\source\engine.mc (dispData:1679)
C:\alan\projects\raceQsGarmin\raceQs\source\engine.mc (GPSData:849)

ERROR: System Error
DETAILS: Failed invoking <symbol>
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
C:\alan\projects\raceQsGarmin\raceQs\source\db_navigation.mc (onUpdate:125)



Does anyone know what to make of "System Error"?

Yes, I have looked at the referenced lines, and they are fine, executed many times without issue. I'm not looking for a solution to the cause of the crash, but to understand what "System Error" tells me.
  • The bigger issue is using both setProperty and setValue at the same time in the same app

  • ok, maybe i'm being dense, but how do you read from the properties.xml file with Storage?  looking thru the docs, i don't see where Garmin shows how to do that with Storage and also not seeing where they say you can't use both. 

    developer.garmin.com/.../

    anyhow, not sure if this is helping me figure out the original System Error issue.

  • ok, maybe i'm being dense, but how do you read from the properties.xml file with Storage?  looking thru the docs, i don't see where Garmin shows how to do that with Storage and also not seeing where they say you can't use both. 

    https://developer.garmin.com/connect-iq/core-topics/persisting-data/

    I think the idea is that for devices with API >= 2.4.0:

    • Use Storage.getValue() and setValue() to deal with storage (values that your app persists.)
    • Use Properties.getValue() and setValue() to deal with properties (app settings and properties.xml)

    Which API Should I Use?

    If your app runs on devices at API level 2.4.0 or above, Storage offers a superior solution for persisting application data compared to the Object Store. Using the newer APIs in an existing app is simply a matter of updating code to call the new methods. However, there are a couple of important things of which to be aware:

    1. Object Store data files are not converted to the new format.

      If an app used storage prior to API level 2.4.0, existing properties will not automatically migrate to the new file format used by the Storage module. If a conversion is needed, an app must include a routine to get the data from the old files and store it in the new format.

    2. Properties will throw an exception if attempting to write to an undefined property. Prior to API level 2.4.0, an attempt to write to an undefined property would result in a value written to storage (the .STR file) since getProperty() and setProperty() were overloaded to function with each of Storage, Properties, and Settings. This behavior will no longer occur when using the Properties module since it is distinct from Settings. Instead, an InvalidKeyException is thrown.

    To maximize the number of supported devices, use a has check to see if the Storage API is available and then call the appropriate methods based on what the device supports:

    if ( Toybox.Application has :Storage ) {
        // use Application.Storage and Application.Properties methods
    } else {
        // use Application.AppBase methods
    }
    

    For more, see the ApplicationStorage sample app distributed with the SDK.