【问题标题】:IBMCloudCodeHybrid SDK always going to onFailure on AndroidIBMCloudCodeHybrid SDK 在 Android 上总是会出现 onFailure
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2015-07-06
      • 1970-01-01
      相关资源
      最近更新 更多