IBMCloudCodeHybrid SDK总是在Android上onFailure

时间:2015-05-06 13:15:26

标签: javascript android node.js hybrid ibm-cloud

我正在BlueMix上开发移动混合应用程序。我刚按照here的说明添加了必要的工具。

Server 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:第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出了什么问题?

1 个答案:

答案 0 :(得分:0)

您应检查的第一项是发送给设备的内容类型标头。 对于json来说应该是&#39; application / json&#39; (或者&#39; application / javascript&#39;对于JSONP),很多时候库会检查它以选择正确的解析器。