如何在黑莓级联中使用json webservice

时间:2013-09-03 18:14:34

标签: blackberry blackberry-10 blackberry-cascades

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

2.i需要将数据从url链接到qml页面。如果可能的话,给出一些样本。

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

例如: {“address”:[“area”:“chn”,“city”:“ght”]}

4.产品说明: json链接 - >的 192.168.1.251:410/Mobile/Service1.svc/english/Category?CountryID=1

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();