IBMCloudCodeHybrid SDK总是在Android上失败

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

服务器Node.js代码(依赖关系和ibmconfigvariables被正确设置):

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\"}"警报。 无论我尝试做什么(例如设置内容types标题),我总是会去Android设备上的onFailure函数。

我发现,Android上的服务器响应被理解为string而不是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); } 

这样,每当收到一个string,它将被转换为JSON。
这对我有效。
所以我的问题是,我必须为了使它在Android上工作吗? 还是有一个正确的方法来做到这一点/我做错了什么? 或者Bluemix SDK有问题?

你应该检查的第一个项目是发送到设备的内容types头。 对于json,它应该是'application / json'(或JSONP的'application / javascript'),通常库会检查它以select正确的parsing器。