无法在 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 文件中的标签文本?