首先,我想说我对 BB 完全陌生,而且我来自 Android 背景。
我一直在看样本,例如:
https://developer.blackberry.com/cascades/documentation/device_comm/networking/
我有一个应用程序正在发出许多不同(和相似)的网络请求。如何识别这些传入的回复,以便将它们解复用到相应的组件?我可以以某种方式标记它们吗?
谢谢,如果我能更清楚,请告诉我。
首先,我想说我对 BB 完全陌生,而且我来自 Android 背景。
我一直在看样本,例如:
https://developer.blackberry.com/cascades/documentation/device_comm/networking/
我有一个应用程序正在发出许多不同(和相似)的网络请求。如何识别这些传入的回复,以便将它们解复用到相应的组件?我可以以某种方式标记它们吗?
谢谢,如果我能更清楚,请告诉我。
正如@Kernald 上面所写,您可能要求的所有信息都可以在QNetworkReply
object. 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
toQNetworkRequest
对象来手动标记网络请求:
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(对于当前在最新的 Blackberry 10 SDK 中使用的 4.8 版)文档:
您至少有两种方法可以做到这一点:
QNetworkReply
,您可以访问您的原始请求 ( https://developer.blackberry.com/cascades/reference/qnetworkreply.html#request ),您可以在其上设置originatingObject
:https://developer.blackberry.com/cascades /reference/qnetworkrequest.html#setOriginatingObject以及您请求中的任何其他属性