#http #qt #symbian #http-get #qnetworkaccessmanager
#http #qt #symbian #http-get #qnetworkaccessmanager
Вопрос:
Я пытаюсь выполнить httpget на мобильном устройстве Symbian в Qt 4.7.
Я тестировал программу в Windows и на эмуляторе Symbian, и они оба работают, но когда я пробую это на устройстве Symbian, я получаю ошибку:
Ошибка сетевого сеанса.
Когда я пытаюсь выполнить httpget через браузер на устройстве Symbian, это работает, и я вижу страницу.
Вот сетевой код:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl(Consts::webserviceURL Consts::servletLogin "?"
Consts::username "=" username "amp;"
Consts::password "=" password)));
Вот готовый ответ:
void LoginDialog::replyFinished(QNetworkReply* reply){
qDebug() << "reply finished";
if (reply->error()) {
ui->lbl_loginerror->setText("server niet bereikbaar: " reply->errorString());
qDebug() << "server niet bereikbaar: " << reply->errorString();
}
else {
....
Вывод всего этого:
[Qt Message] reply finished
[Qt Message] server niet bereikbaar: "Network session error."
- С подключением все в порядке: проверка браузера выполнена успешно
- В коде нет ничего плохого: поскольку он работает на эмуляторе
Что я сделал не так?
Редактировать
Я также добавил сетевые сервисы в .pro
файл:
symbian {
TARGET.UID3 = 0xeeb46dc7
TARGET.CAPABILITY = networkservices
TARGET.EPOCSTACKSIZE = 0x14000
TARGET.EPOCHEAPSIZE = 0x020000 0x800000
}
Ответ №1:
Я решил ее с помощью этого:
QString DataConnector::get(QString path){
QNetworkAccessManager NAManager;
QUrl url (path);
QNetworkRequest request(url);
QNetworkReply *reply = NAManager.get(request);
QEventLoop eventLoop;
QObject::connect(reply, SIGNAL(finished()), amp;eventLoop, SLOT(quit()));
eventLoop.exec();
QString replyString = reply->readAll();
return replyString;
}
И я добавил эту строку в symbian:{}
раздел в .pro
файле:
symbian: {
TARGET.CAPABILITY = "NetworkServices ReadUserData WriteUserData"
}