Blackberry 10: Как соотнести входящие http-ответы с их предыдущими аналогами http-запросов?

Прежде всего, я хотел бы сказать, что я совершенно новичок в BB и я работаю на Android.

Я смотрю на образцы, такие как:

https://developer.blackberry.com/cascades/documentation/device_comm/networking/

У меня есть приложение, которое делает много разных (и похожих) веб-запросов. Как мне определить эти входящие ответы, чтобы я мог преобразовать их в соответствующие компоненты? Могу ли я пометить их как-нибудь?

Спасибо и, пожалуйста, дайте мне знать, если я могу быть более ясным.

0

Решение

Как писал @Kernald выше, всю информацию, которую вы, вероятно, запрашиваете, можно найти в QNetworkReply объект. Вы получите указатель на этот объект после размещения запроса, позвонив QNetworkAccessManager::get() или же QNetworkAccessManager::put()

Когда вы получаете ответ, он доставляется через QNetworkAccessManager::finished(QNetworkReply *reply) сигнал

Здесь вы можете получить доступ к аналогам через указатель на соответствующий QNetworkRequestи это содержимое в зависимости от того, что вы после

QNetworkAccessManager* networkAccessManager;

// skipped

bool result = connect(networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
Q_ASSERT(result);

// skipped

void requestFinished(QNetworkReply* reply) {
QNetworkRequest* request = reply->request();
QUrl url = request->url(); // get the URL
QVariant header = request->header(); // get the header
// etc...
}

Кроме того, вы можете получить необработанные заголовки сетевого ответа, например:

QByteArray hdr;
QList<QByteArray> list = reply->rawHeaderList();
Q_FOREACH(hdr, list){
qDebug() << hdr;
}

Если по какой-то причине этого недостаточно, вы можете вручную пометить сетевой запрос, назначив QNetworkRequest::Attribute в QNetworkRequest объект:

QNetworkRequest request; // Create and send the network request
QNetworkRequest::Attribute attr = QNetworkRequest::User+1; // any unique value greater than QNetworkRequest::User
QString myStuff;
request.setAttribute(attr, myStuff);

Эти значения атрибута должны быть больше, чем QNetworkRequest::User вплоть до QNetworkRequest::UserMax, После этого вы получите атрибут, ранее назначенный запросу, следующим образом:

void requestFinished(QNetworkReply* reply) {
QNetworkRequest* request = reply->request();
QNetworkRequest::Attribute myAttr = QNetworkRequest::User+1;
QVariant myStuff = reply->request().attribute(myAttr);
// do something further
}

Вот официальная документация BB10 и Qt (для версии 4.8, которая в настоящее время используется в последней версии Blackberry 10 SDK):

2

Другие решения

У вас есть как минимум два способа сделать это:

  1. От QNetworkReply, вы можете получить доступ к вашему первоначальному запросу (https://developer.blackberry.com/cascades/reference/qnetworkreply.html#request), на котором вы можете установить originatingObject: https://developer.blackberry.com/cascades/reference/qnetworkrequest.html#setOriginatingObject, и любой другой атрибут по вашему запросу
  2. Вы можете проверить по содержанию URL: https://developer.blackberry.com/cascades/reference/qnetworkreply.html#url
0