解决QNetworkAccessManager 请求返回UnknownNetworkError,无法继续请求问题
前提:
? ? ? ?使用QNetworkAccessManager 進(jìn)行post請求, 如果在請求期間網(wǎng)絡(luò)斷開,網(wǎng)絡(luò)恢復(fù)后,依然會提示請求失敗,返回UnknownNetworkError。
問題解決:
QNetworkAccessManager 有一個函數(shù)
networkAccessible : NetworkAccessibility
This property holds whether the network is currently accessible via this network access manager.
If the network is not accessible the network access manager will not process any new network requests, all such requests will fail with an error. Requests with URLs with the file:// scheme will still be processed.
By default the value of this property reflects the physical state of the device. Applications may override it to disable all network requests via this network access manager by calling
e文不好的小伙伴,翻譯一下看看,大體意思請求網(wǎng)絡(luò)失敗后,會保存當(dāng)前的網(wǎng)絡(luò)狀態(tài), 導(dǎo)致后面繼續(xù)請求也是失敗。
根據(jù)文檔
Network requests can be reenabled again by calling
networkAccessManager->setNetworkAccessible(QNetworkAccessManager::Accessible);
要恢復(fù)網(wǎng)絡(luò)請求調(diào)用一setNetworkAccessible即可。
只需要在QNetworkAccessManager執(zhí)行g(shù)et或者post的時候,獲取一下NetworkAccessible的狀態(tài), 再設(shè)置一下就好了
void QPayHeartBeat::post() {if(m_NetManager){;QNetworkRequest request = setRequest();QByteArray data = setReplyData();//判斷一下網(wǎng)絡(luò)狀態(tài), 如果為NotAccessible 重新設(shè)置一下if(m_NetManager->networkAccessible() == QNetworkAccessManager::NotAccessible){m_NetManager->setNetworkAccessible(QNetworkAccessManager::Accessible);}QNetworkReply *reply = m_NetManager->post(request, data);//這里是我自定義的超時類, 無需理會QReplyTimeOut *pTimeout = new QReplyTimeOut(reply, 1000 * 5);connect(pTimeout, &QReplyTimeOut::timeout, this, [&]{qDebug() << "time out";});connect(reply, SIGNAL(finished()), this, SLOT(replyFinished()));} }困擾一個多月的問題, 終于解決了。。。果然有問題, 還得多看下文檔。有相同問題的小伙伴可以參考一下。
總結(jié)
以上是生活随笔為你收集整理的解决QNetworkAccessManager 请求返回UnknownNetworkError,无法继续请求问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ECL/PECL/LVPECL电平学习笔
- 下一篇: 协同过滤(英语:Collaborativ