0

1.如何在黑莓级联中使用json web service。

2.我需要从 url 链接获取数据到 qml 页面。如果可能的话,提供一些样本的建议。

3.我的web服务链接包含数组类型

例如:{“地址”:[“区域”:“chn”,“城市”:“ght”]}

4.description: json 链接 --> 192.168.1.251:410/Mobile/Service1.svc/english/Category?CountryID=1

5.通过使用上面的链接,请告诉如何在级联中从 json webservice 中检索数据..我需要在级联方法中回答..

4

2 回答 2

3

对。好吧,这实际上是一个两部分的问题。一是如何发出请求并接收回复,二是如何解析JSON;幸运的是,Cascades 已经涵盖了这两种情况。

提出请求:

QNetworkAccessManager qNam;
QNetworkRequest req("192.168.1.251:410/Mobile/Service1.svc/english/Category?CountryID=1");
QNetworkReply *reply = qNam.get(req);

connect(reply, SIGNAL(finished()), this, SLOT(onFinished()));

然后像这样定义 onFinished 插槽:

void ClassName::onFinished() {
    QNetworkReply *reply = dynamic_cast<QNetworkReply*>(sender());

    if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200) {
        JsonDataAccess jda;
        QVariantMap map = jda.loadFromBuffer(reply->readAll()).toMap();

        QVariantList addresses = map["address"].toList();

        foreach(QVariant var, addresses) {
            QVariantMap addressMap = var.toMap();
            qDebug() << "Area is " << addressMap["area"].toString();
            qDebug() << "City is " << addressMap["city"].toString();
        }
    }
    else {
        qDebug() << "Server returned code " << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()
    }
}

为此,该方法必须在类中标记为Q_SLOT.

于 2013-09-04T20:20:07.720 回答
1

试试这个语法..如果需要更多从这里获取它http://qjson.sourceforge.net/usage/

QJson::Parser parser;
bool ok;

QVariantMap result = parser.parse (json, &ok).toMap();
if (!ok) {
  qFatal("An error occurred during parsing");
  exit (1);
}

qDebug() << "encoding:" << result["encoding"].toString();
qDebug() << "plugins:";

foreach (QVariant plugin, result["plug-ins"].toList()) {
  qDebug() << "\t-" << plugin.toString();
}

QVariantMap nestedMap = result["indent"].toMap();
qDebug() << "length:" << nestedMap["length"].toInt();
qDebug() << "use_space:" << nestedMap["use_space"].toBool();
于 2013-09-03T18:21:20.327 回答