1 pièce(s) jointe(s)
Plantage après deux entrées dans requestFinished()
Bonjour tout le monde,
J'ai développé une application qui se connecte à un serveur distant, envoi un service web et récupère les données.
Pour se connecter au serveur et invoquer le service Web j'ai utilisé
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
void Connexion::connectToWebService(QString host, quint16 port, QString path, vector <QStringList> paramsList)
{
// formater la chaine à envoyer
QString params;
int i = 0;
int listParamSize = paramsList.size()-1;
while(i <= listParamSize){
if(0 < i){
params += "&";
}
params += QString(paramsList[i].at(0).toLocal8Bit().constData())+"="+QUrl::toPercentEncoding(QString(paramsList[i].at(1).toLocal8Bit().constData()));
++i;
}
//invoquer le service web
this->http.clearPendingRequests();
QHttpRequestHeader header("POST", path);
header.setValue("HOST", host);
header.setValue("Cache-Control", "no-cache");
header.setContentType("application/x-www-form-urlencoded");
header.setContentLength(params.length());
this->http.setHost(host);
this->idVerify = this->http.request(header, params.toUtf8());
this->http.closeConnection(); |
J'ai implémenté la fonction receive qui se déclenche avec le slot requestfinished(int, bool) :
Code:
connect(&http, SIGNAL(requestFinished(int, bool)), this, SLOT(receive(int, bool)));
Le code de la fonction receive est
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| void Connexion::receive(int id, bool error)
{
if(error)
{
qDebug() << http.errorString();
this->result = http.errorString();
}
else
{
if(id == this->idVerify )
{
QTextCodec *textCodec = QTextCodec::codecForName("utf-8");
QString res = textCodec->toUnicode(this->http.readAll());
QDomDocument doc;
doc.setContent(res);
QDomElement docElem = doc.documentElement();
result = docElem.text();
// fonction à appeler après reception données
startApplication();
}
}
} |
Mon problème réside dans le fait que si j'ai une erreur dans le résultat récupéré, la fonction startApplication affiche un message d'erreur. Si j'attends un certain temps, l'application entre de nouveau dans la fonction receive mais cette fois, la variable result est vide et la fonction startApplication affiche un autre message. Si je clique sur ces 2 messages, l'application se plante et j'ai une erreur comme indiqué dans le PJ
Est ce que quelqu'un a une idée sur ce problème et pourra me venir en aide.
Merci d'avance.
Bien cordialement.