【发布时间】:2015-05-06 13:15:25
【问题描述】:
我正在 BlueMix 上开发一个移动混合应用程序。我刚刚按照here 的说明添加了必要的工具。
服务器 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\"}" 警报。无论我尝试做什么(例如设置内容类型标头),我总是会在 Android 设备上使用 onFailure 功能。
我发现Android上的服务器响应被理解为字符串而不是JSON,所以我更改了IBMCloudCodeHybrid.js:line 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 出了什么问题?
【问题讨论】:
标签: javascript android node.js hybrid ibm-cloud