2015-05-06 4 views
2

Я разрабатываю мобильное приложение для мобильных устройств на BlueMix. Я только что добавил необходимые инструменты, следуя инструкциям here.IBMCloudCodeHybrid SDK всегда идет в onFailure на 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); 
    }); 
}); 

Извините за удаление NONE необходимых вещей. Моя проблема в том, что этот код фактически работает на устройствах iOS, но не на Android. Значение для iOS я получаю предупреждение World, но для Android я получаю предупреждение [ERROR] "{\"code\":200,\"data\":\"World\"}". И что бы я ни пытался сделать (например, настраивая заголовок типа содержимого), я всегда перехожу к функции onFailure на устройствах 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? Или есть правильный способ сделать это/я делаю что-то неправильно? Или что-то не так с SDK Bluemix?

ответ

0

Первый элемент, который вы должны проверить, - это заголовок содержимого, отправленный на устройство. Для json это должно быть «application/json» (или «application/javascript» для JSONP), очень часто библиотеки проверяют его, чтобы выбрать правильный парсер.

 Смежные вопросы

  • Нет связанных вопросов^_^