Невозможно загрузить JSON DataSource через https в BlackBerry Cascades

Загрузка моего JSON DataSource через https, похоже, не удалась. Он работает, когда я загружаю URL-адрес в браузере на своем устройстве BlackBerry 10, но не работает, когда я пытаюсь использовать этот URL-адрес в Qml.

Вот как выглядит мой объект DataSource:

DataSource {
    id: dsTitles
    source: ""
    type: DataSourceType.Json
    onDataLoaded: {
        if (Common.hasError(updateError, data, "Failed to load data. Please check your connection and try again.")) {
            console.log("Data contains error");
            navigationPane.pop();
            return;
        }
        loadedTitles = true;
        Code.loadDropDown(data, ddTitle, "title", "titleId")
        Code.hideLoadIndicator();
        if (updateProfile && ddTitle.selectedValue == null) {
            Code.setDropDownOptionByValue(ddTitle, profile.userTitleId);
        }
    }
    onError: {
        console.log("Failed to load titles: " + errorMessage);
    }

В качестве примера этой проблемы можно использовать любой веб-сервис https JSON.


person Tjaart    schedule 16.01.2013    source источник


Ответы (3)


Можно использовать XMLHttpRequest для загрузки данных из JavaScript. Я создал следующие две функции:

function loadJsonDataList(value, dataModel) { for (var i = 0; i ‹ value.length; i ++) { dataModel.insert(value[i]); } возвращаемое значение; }

function loadData(url, onComplete) { var request = new XMLHttpRequest();

request.open("GET", url);
request.send();

request.onreadystatechange = function() {
    if (request.readyState === 4 && request.status === 200) {
        onComplete(JSON.parse(request.responseText));
    } else {

        onComplete(request.responseText);
    }
};

}

Вы можете использовать указанные выше функции следующим образом:

function getData2() 
{
    console.log("Get data called");
    Common.loadData("https://mywebservice/here/someFunction", getDataCallBack);
}

function getDataCallBack(dataObject) 
{
    console.log("Get data callback called");
    Common.loadJsonDataList(dataObject, lstViewItems.dataModel);
}

В настоящее время кажется, что объекты Qml DataSource не могут загружать данные веб-службы SSL, однако их можно загрузить вручную, как указано выше. Я постараюсь следить за проблемой и обновить ответ, если они в конечном итоге это исправят или если другой ответ может объяснить, как использовать DataSource таким образом.

person Tjaart    schedule 15.04.2013

Я решил это, наконец, используя https в моем источнике данных. Явным образом объявив remote : true.

Теперь это, кажется, решает, что безопасные источники JSON не загружаются.

person P J    schedule 19.07.2015

Вы не можете использовать значение http для источника, вам нужно будет загрузить файл JSON, а затем передать его в источник данных.

Пример приложения «Weatherguesser» от Blackberry показывает, как получать данные из онлайн-источника и передавать их в ваш qml.

Обратите особое внимание на файл WeatherModel.cpp, который загружает данные о погоде из JSON-файла онлайн.

Короче говоря, вам понадобится NetworkAccessManager, а затем вам нужно будет передать ему URL-адрес для загрузки. Результатом можно либо управлять в С++, либо вы можете передать его прямо в qml.

person hyarion    schedule 18.01.2013
comment
Вы можете использовать источник http для JSON. developer.blackberry.com/cascades/documentation/device_platform/ - person Tjaart; 21.01.2013
comment
Приношу свои извинения, я работал с другими объектами (например, изображениями), и для источника требуется локальный путь. - person hyarion; 22.01.2013
comment
Возможно, мне все равно придется использовать NetworkAccessManager, если Qml DataSource не поддерживает https. Однако все удобства DataSource будут выброшены за пределы окна, так что это крайняя мера. - person Tjaart; 23.01.2013