Problem
While valid integers stored in platform properties using the [Titanium.App.Properties.setInt](
http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.App.Properties.setInt-method.html) method behave correctly, those that exceed the value are returned differently on iOS and Android.
Note that I have returned the stored values using both
getInt() and
getDouble, out of interest, which causes an exception on Android but not on iOS. Ideally, this behavior would also be consistent.
Test case
Ti.App.Properties.setInt("NegativeNumberLowInt", -2147483647);
Ti.API.info("****** NegativeNumberLowInt -2147483647 Saved ******");
Ti.API.info("****** NegativeNumberLowInt: " + Ti.App.Properties.getInt("NegativeNumberLowInt"));
Ti.App.Properties.setInt("NegativeNumberMediumInt", -2147483648);
Ti.API.info("****** NegativeNumberMediumInt -2147483648 Saved ******");
Ti.API.info("****** NegativeNumberMediumInt: " + Ti.App.Properties.getInt("NegativeNumberMediumInt"));
Ti.App.Properties.setInt("NegativeNumberHigherInt", -2147483649);
Ti.API.info("****** NegativeNumberHigherInt -2147483649 Saved ******");
Ti.API.info("****** NegativeNumberHigherInt: " + Ti.App.Properties.getInt("NegativeNumberHigherInt"));
Ti.App.Properties.setInt("NegativeNumberHighestInt", -1325269931753);
Ti.API.info("****** NegativeNumberHighestInt -1325269931753 Saved ******");
Ti.API.info("****** NegativeNumberHighestInt: " + Ti.App.Properties.getInt("NegativeNumberHighestInt"));
Ti.API.info("----------------------------------");
Ti.App.Properties.setInt("PositiveNumberLowInt", 2147483646);
Ti.API.info("****** PositiveNumberLowInt 2147483646 Saved ******");
Ti.API.info("****** PositiveNumberLowInt: " + Ti.App.Properties.getInt("PositiveNumberLowInt"));
Ti.App.Properties.setInt("PositiveNumberMediumInt", 2147483647);
Ti.API.info("****** PositiveNumberMediumInt 2147483647 Saved ******");
Ti.API.info("****** PositiveNumberMediumInt: " + Ti.App.Properties.getInt("PositiveNumberMediumInt"));
Ti.App.Properties.setInt("PositiveNumberHigherInt", 2147483648);
Ti.API.info("****** PositiveNumberHigherInt 2147483648 Saved ******");
Ti.API.info("****** PositiveNumberHigherInt: " + Ti.App.Properties.getInt("PositiveNumberHigherInt"));
Ti.App.Properties.setInt("PositiveNumberHighestInt", 1325269931753);
Ti.API.info("****** PositiveNumberHighestInt 1325269931753 Saved ******");
Ti.API.info("****** PositiveNumberHighestInt: " + Ti.App.Properties.getInt("PositiveNumberHighestInt"));
Ti.API.info("----------------------------------");
Ti.API.info("----------------------------------");
Ti.App.Properties.setInt("NegativeNumberLowInt", -2147483647);
Ti.API.info("****** NegativeNumberLowInt -2147483647 Saved ******");
Ti.API.info("****** NegativeNumberLowInt: " + Ti.App.Properties.getDouble("NegativeNumberLowInt"));
Ti.App.Properties.setInt("NegativeNumberMediumInt", -2147483648);
Ti.API.info("****** NegativeNumberMediumInt -2147483648 Saved ******");
Ti.API.info("****** NegativeNumberMediumInt: " + Ti.App.Properties.getDouble("NegativeNumberMediumInt"));
Ti.App.Properties.setInt("NegativeNumberHigherInt", -2147483649);
Ti.API.info("****** NegativeNumberHigherInt -2147483649 Saved ******");
Ti.API.info("****** NegativeNumberHigherInt: " + Ti.App.Properties.getDouble("NegativeNumberHigherInt"));
Ti.App.Properties.setInt("NegativeNumberHighestInt", -1325269931753);
Ti.API.info("****** NegativeNumberHighestInt -1325269931753 Saved ******");
Ti.API.info("****** NegativeNumberHighestInt: " + Ti.App.Properties.getDouble("NegativeNumberHighestInt"));
Ti.API.info("----------------------------------");
Ti.App.Properties.setInt("PositiveNumberLowInt", 2147483646);
Ti.API.info("****** PositiveNumberLowInt 2147483646 Saved ******");
Ti.API.info("****** PositiveNumberLowInt: " + Ti.App.Properties.getDouble("PositiveNumberLowInt"));
Ti.App.Properties.setInt("PositiveNumberMediumInt", 2147483647);
Ti.API.info("****** PositiveNumberMediumInt 2147483647 Saved ******");
Ti.API.info("****** PositiveNumberMediumInt: " + Ti.App.Properties.getDouble("PositiveNumberMediumInt"));
Ti.App.Properties.setInt("PositiveNumberHigherInt", 2147483648);
Ti.API.info("****** PositiveNumberHigherInt 2147483648 Saved ******");
Ti.API.info("****** PositiveNumberHigherInt: " + Ti.App.Properties.getDouble("PositiveNumberHigherInt"));
Ti.App.Properties.setInt("PositiveNumberHighestInt", 1325269931753);
Ti.API.info("****** PositiveNumberHighestInt 1325269931753 Saved ******");
Ti.API.info("****** PositiveNumberHighestInt: " + Ti.App.Properties.getDouble("PositiveNumberHighestInt"));
Logs
Android
On Android:
* negative numbers that are below the max limit are stored as
-2147483648
* positive numbers that are above the max limit are stored as
2147483647
I/TiApplication( 990): (main) [235,235] Titanium 1.8.1 (2012/01/27 17:31 a24502a)
D/dalvikvm( 990): GC_FOR_MALLOC freed 3623 objects / 319608 bytes in 61ms
D/TiFastDev( 990): (main) [175,410] Enabling Fastdev on port 52214
D/TiFastDev( 990): (main) [9,419] sent tokens successfully
D/TiFastDev( 990): (main) [1,420] Fastdev session handshake succesful.
I/TiApplication( 990): (main) [7,427] Titanium Javascript runtime: v8
D/dalvikvm( 990): Trying to load lib /data/data/com.appcelerator.testing11/lib/libstlport_shared.so 0x44e7e580
D/dalvikvm( 990): Added shared lib /data/data/com.appcelerator.testing11/lib/libstlport_shared.so 0x44e7e580
D/dalvikvm( 990): No JNI_OnLoad found in /data/data/com.appcelerator.testing11/lib/libstlport_shared.so 0x44e7e580, skipping init
D/dalvikvm( 990): Trying to load lib /data/data/com.appcelerator.testing11/lib/libkroll-v8.so 0x44e7e580
W/TiApplication( 990): (main) [62,489] activity stack is emtpy, unable to get current activity
I/TiRootActivity( 990): (main) [0,0] checkpoint, on root activity create, savedInstanceState: null
D/dalvikvm( 990): Added shared lib /data/data/com.appcelerator.testing11/lib/libkroll-v8.so 0x44e7e580
W/TiApplication( 990): (main) [119,119] activity stack is emtpy, unable to get current activity
W/TiApplication( 990): (main) [0,119] activity stack is emtpy, unable to get current activity
W/TiApplication( 990): (main) [1,120] activity stack is emtpy, unable to get current activity
E/TiApplication( 990): (KrollRuntimeThread) [1250,1370] APP PROXY: ti.modules.titanium.app.AppModule@44ec9198
D/TiAssetHelper( 990): Fetching "app.js" with Fastdev...
D/dalvikvm( 990): GC_FOR_MALLOC freed 3137 objects / 418352 bytes in 51ms
I/TiAPI ( 990): ****** NegativeNumberLowInt -2147483647 Saved ******
I/TiAPI ( 990): ****** NegativeNumberLowInt: -2147483647
I/TiAPI ( 990): ****** NegativeNumberMediumInt -2147483648 Saved ******
I/TiAPI ( 990): ****** NegativeNumberMediumInt: -2147483648
I/TiAPI ( 990): ****** NegativeNumberHigherInt -2147483649 Saved ******
I/TiAPI ( 990): ****** NegativeNumberHigherInt: -2147483648
I/TiAPI ( 990): ****** NegativeNumberHighestInt -1325269931753 Saved ******
I/TiAPI ( 990): ****** NegativeNumberHighestInt: -2147483648
I/TiAPI ( 990): ----------------------------------
I/TiAPI ( 990): ****** PositiveNumberLowInt 2147483646 Saved ******
I/TiAPI ( 990): ****** PositiveNumberLowInt: 2147483646
I/TiAPI ( 990): ****** PositiveNumberMediumInt 2147483647 Saved ******
I/TiAPI ( 990): ****** PositiveNumberMediumInt: 2147483647
I/TiAPI ( 990): ****** PositiveNumberHigherInt 2147483648 Saved ******
I/TiAPI ( 990): ****** PositiveNumberHigherInt: 2147483647
I/TiAPI ( 990): ****** PositiveNumberHighestInt 1325269931753 Saved ******
I/TiAPI ( 990): ****** PositiveNumberHighestInt: 2147483647
I/TiAPI ( 990): ----------------------------------
I/TiAPI ( 990): ----------------------------------
// using getDouble()
I/TiAPI ( 990): ****** NegativeNumberLowInt -2147483647 Saved ******
E/TiJSError( 990): (main) [567,1937] ----- Titanium Javascript Runtime Error -----
E/TiJSError( 990): (main) [1,1938] - In ti:/properties.js:18,20
E/TiJSError( 990): (main) [0,1938] - Message: Uncaught Error: java.lang.Integer
E/TiJSError( 990): (main) [0,1938] - Source: return delegate.call(Properties, key);
E/V8Exception( 990): Exception occurred at ti:/properties.js:18: Uncaught Error: java.lang.Integer
I/TiRootActivity( 990): (main) [0,0] checkpoint, on root activity resume. activity = com.appcelerator.testing11.Testing11Activity@44ee0098
I/ActivityManager( 60): Displayed activity com.appcelerator.testing11/.Testing11Activity: 4564 ms (total 4564 ms)
D/dalvikvm( 116): GC_EXPLICIT freed 135 objects / 7064 bytes in 50ms
iOS
On iOS:
* negative numbers that are below the max limit are stored as
2147483647, very large negatives stored as
1874962711
* positive numbers that are above the max limit are stored as
-2147483648, very large positives stored as
-1874962711
[INFO] Application started
[INFO] testing11/1.0 (1.8.1.a24502a)
[INFO] ****** NegativeNumberLowInt -2147483647 Saved ******
[INFO] ****** NegativeNumberLowInt: -2147483647
[INFO] ****** NegativeNumberMediumInt -2147483648 Saved ******
[INFO] ****** NegativeNumberMediumInt: -2147483648
[INFO] ****** NegativeNumberHigherInt -2147483649 Saved ******
[INFO] ****** NegativeNumberHigherInt: 2147483647
[INFO] ****** NegativeNumberHighestInt -1325269931753 Saved ******
[INFO] ****** NegativeNumberHighestInt: 1874962711
[INFO] ----------------------------------
[INFO] ****** PositiveNumberLowInt 2147483646 Saved ******
[INFO] ****** PositiveNumberLowInt: 2147483646
[INFO] ****** PositiveNumberMediumInt 2147483647 Saved ******
[INFO] ****** PositiveNumberMediumInt: 2147483647
[INFO] ****** PositiveNumberHigherInt 2147483648 Saved ******
[INFO] ****** PositiveNumberHigherInt: -2147483648
[INFO] ****** PositiveNumberHighestInt 1325269931753 Saved ******
[INFO] ****** PositiveNumberHighestInt: -1874962711
[INFO] ----------------------------------
[INFO] ----------------------------------
// using getDouble()
[INFO] ****** NegativeNumberLowInt -2147483647 Saved ******
[INFO] ****** NegativeNumberLowInt: -2147483647
[INFO] ****** NegativeNumberMediumInt -2147483648 Saved ******
[INFO] ****** NegativeNumberMediumInt: -2147483648
[INFO] ****** NegativeNumberHigherInt -2147483649 Saved ******
[INFO] ****** NegativeNumberHigherInt: 2147483647
[INFO] ****** NegativeNumberHighestInt -1325269931753 Saved ******
[INFO] ****** NegativeNumberHighestInt: 1874962711
[INFO] ----------------------------------
[INFO] ****** PositiveNumberLowInt 2147483646 Saved ******
[INFO] ****** PositiveNumberLowInt: 2147483646
[INFO] ****** PositiveNumberMediumInt 2147483647 Saved ******
[INFO] ****** PositiveNumberMediumInt: 2147483647
[INFO] ****** PositiveNumberHigherInt 2147483648 Saved ******
[INFO] ****** PositiveNumberHigherInt: -2147483648
[INFO] ****** PositiveNumberHighestInt 1325269931753 Saved ******
[INFO] ****** PositiveNumberHighestInt: -1874962711
Related Info
[Java's Primitive Data Types](
http://ibiblio.org/java/course/week2/02.html)
Closing ticket due to time passed, any problems please open a new ticket.