无法在 BlackBerry Cascades 中通过 https 加载 JSON 数据源

Posted

技术标签:

【中文标题】无法在 BlackBerry Cascades 中通过 https 加载 JSON 数据源【英文标题】:Unable to load JSON DataSource over https in BlackBerry Cascades 【发布时间】:2013-01-16 13:45:40 【问题描述】:

通过 https 加载我的 JSON 数据源似乎失败了。当我在 BlackBerry 10 设备上的浏览器中加载 url 时它可以工作,但当我尝试在 Qml 中使用该 url 时失败。

这是我的 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 web 服务都可以用作此问题的示例。

【问题讨论】:

【参考方案1】:

可以使用 XMLHttpRequest 从 javascript 加载数据。我创建了以下两个函数:

函数 loadJsonDataList(value, dataModel) for (var i = 0; i

函数 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 Web 服务数据,但是可以如上所述手动加载它。如果他们最终解决了这个问题,或者另一个答案可以解释如何以这种方式使用 DataSource,我会尝试关注这个问题并更新答案。

【讨论】:

【参考方案2】:

我终于在我的数据源中使用 https 解决了这个问题。通过显式声明remote : true

这现在似乎解决了无法加载安全 JSON 源的问题。

【讨论】:

【参考方案3】:

您不能对源使用 http 值,您需要实际下载 JSON 文件,然后将其传递给数据源。

blackberry 的“Weatherguesser”示例应用程序展示了如何从在线资源中获取数据并将其传递给您的 qml。

具体看一下weathermodel.cpp文件,它从在线的json文件中下载天气数据。

简而言之,您将需要一个 NetworkAccessManager,然后需要将一个 url 传递给它以进行下载。然后可以在 c++ 中管理结果,也可以将其直接传递给 qml。

【讨论】:

您可以为 JSON 使用 http 源。 developer.blackberry.com/cascades/documentation/device_platform/… 抱歉,我一直在使用其他对象(例如图像视图)并且源需要本地路径。 如果 Qml 数据源不支持 https,我可能不得不使用 NetworkAccessManager。但是,DataSource 的所有便利都将不在窗口中,所以这绝对是最后的手段。

以上是关于无法在 BlackBerry Cascades 中通过 https 加载 JSON 数据源的主要内容,如果未能解决你的问题,请参考以下文章

我的 Blackberry 10 Cascades(C++、Qt 和 QML)示例应用程序在启动时崩溃并出现以下错误

尝试在 Blackberry Cascades QT 和 QML 中下载图像

BlackBerry Cascades 中的 QML 字符串

如何在 Cascades、Blackberry 10 中使用 Qt/QML/C++ 从另一个 qml 文件中更改一个 qml 文件中的标签文本?

Blackberry 10 Cascades、qml (C++ & QT) 中的布局存在问题

如何在 Blackberry Cascades qml 和 qt 中点击列表项组件