2013-07-03 73 views
1

背景:相同认购Android上返回不同的JSON结果VS iOS的

我使用的是通用的HTTPebble库作为手表和手机之间的桥梁写东西的卵石Smartwatch折价。这需要特定的iOS应用程序和不同的Android应用程序,尽管它们都使用相同的框架和库。

问题:

我能够做一个HTTP调用到PHP服务器,并成功返回和解码JSON连音从Android的姜饼结果。但是,在iOS设备上使用相同的呼叫时,我无法收到有效的预期结果。

这里是我使用以接收JSON结果的代码:

#define INTRO_DAY1_ICON 1 
Tuple* icon = dict_find(received,INTRO_DAY1_ICON); 
if (icon){ 
    dayTransition.day[0].currentWeather = icon->value->int8; 

我期待icon->值 - > INT8是0-2的整数值,1,2,3,11或99.在Android上,它目前正按预期工作。但是,在iOS上我似乎总是返回8的结果。进一步说,该图标通过Android返回值大于50,000(有数据),而它在iOS上返回值为0。

更令人费解的是,提供的示例代码能够在两个设备上返回有效的结果,但是使用我的代码镜像该功能不会产生相同的结果。 (意思是无论从设备调用的时候,data_tuple充满) 该代码如下:

Tuple* data_tuple = dict_find(received, WEATHER_KEY_CURRENT); 
    if(data_tuple) { 
     uint16_t value = data_tuple->value->int16; 
     uint8_t icon = value >> 11; 
     if(icon < 10) { 

任何想法,这可能是为什么发生?

回答

0

我终于明白了!我认为这个问题是iOS和Android上的数据解释方式。在Android上,我可以传回任何类型的整数(有符号或无符号,8,16或32位),这似乎是行得通的。但是,在iOS上,我需要对JSON输出(在编码之前)执行按位移动过程,以使其成为无符号的16位整数。然后,一旦它得到回卵石,有代码到16位无符号整数转移到一个无符号的8位整数,将其分配给一个标准的C INT之前

uint16_t value1 = icon_tuple1->value->int16; 
uint8_t icon1 = value1 >> 11; 
dayTransition.day[0].currentWeather = icon1; 

TL; DR 改变你的JSON >> 11,返回到设备,然后在设备上的接收阶段将其不移位< <。

相关问题