2015-05-06 37 views
2

我正在开发一个移动hybrid应用程序在BlueMix上。我刚刚按照说明here添加了必要的工具。IBMCloudCodeHybrid SDK始终会在Android上失败

服务器Node.js的代码(依赖关系和ibmconfig变量的设置是否正确):

app.get(ibmconfig.getContextRoot() + '/hello', function(req,res){ 
    res.send('World'); 
}); 


混合移动应用代码:

var setup = { 
    applicationId:'<applicationId>', 
    applicationRoute:'<applicationRoute>', 
    applicationSecret:'<applicationSecret>' 
}; 

IBMBluemix.initialize(setup).then(function(config){ 
    return IBMCloudCode.initializeService(); 
}).then(function(cloudcode){ 
    cloudcode.get("/hello").then(function(data){ 
     alert(data); 
    }, function(err){ 
     alert("[ERROR] " + err); 
    }); 
}); 

对不起,删除所有没有必要的东西。我的问题是,这个代码实际上在iOS设备上工作,而不是在Android上。对于iOS的含义我收到了World提醒,但对于Android,我收到了[ERROR] "{\"code\":200,\"data\":\"World\"}"提醒。无论我尝试做什么(例如设置内容类型标题),我总是会去on失效功能Android设备。

我发现了什么是Android上的服务器响应被理解为一个字符串,而不是一个JSON,所以我改变了IBMCloudCodeHybrid.js:线687,每当收到一个字符串添加

if (response.constructor === 'abc'.constructor) { 
     response = JSON.parse(response); 
} 
if (_.has(response, "code") && _.has(response, "data") && response.code === 200) { 
     response = response.data; 
} else { 
     defer.reject(response); 
} 

使,它将被转换为JSON。
这对我很有用。
所以我的问题是,我必须为了使它在Android上工作吗?或者是否有适当的方法来做到这一点/我做错了什么? 或者Bluemix SDK有问题?

回答

0

您应该检查的第一项是发送到设备的内容类型标题。 对于json,它应该是'application/json'(或JSONP的'application/javascript'),通常库会检查它以选择正确的解析器。