Repository navigation
Expand file tree
/
Copy pathnetdataaccess.cpp
More file actions
90 lines (72 loc) · 2.55 KB
/
Copy pathnetdataaccess.cpp
File metadata and controls
90 lines (72 loc) · 2.55 KB
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "netdataaccess.h"
#include <QJsonObject>
#include <QJsonDocument>
#include <QEventLoop>
NetDataAccess::NetDataAccess(QWidget* parent) : QWidget(parent), access(new QNetworkAccessManager) {}
std::unique_ptr<NetDataAccess> NetDataAccess::dataAccess = nullptr;
bool NetDataAccess::loadData()
{
QNetworkRequest request;
request.setUrl(QUrl(server));
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=utf-8"));
reply = access->get(request);
// 连接槽函数解析数据
QNetworkReply::connect(reply, &QNetworkReply::finished, this, [=]() {
emit finish(reply);
});
return true;
}
bool NetDataAccess::addItem(QJsonObject&& data, int& id)
{
QNetworkRequest request;
request.setUrl(QUrl(server));
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=utf-8"));
QByteArray _data = QString(QJsonDocument(data).toJson()).toUtf8();
reply = access->post(request, _data);
QEventLoop loop;
// 连接槽函数解析数据
QNetworkReply::connect(reply, &QNetworkReply::finished, [&]() {
if (reply->error() == QNetworkReply::NoError) {
QByteArray _data = reply->readAll();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(_data, &parseJsonErr);
id = document.object()["id"].toInt();
} else {
qWarning() << "Network error:" << reply->errorString();
}
reply->deleteLater();
loop.quit();
});
// 阻塞等待网络请求完成
loop.exec();
return true;
}
bool NetDataAccess::updateItem(QJsonObject&& data)
{
QNetworkRequest request;
QString url = server;
url += "/" + data["id"].toString();
request.setUrl(QUrl(url));
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=utf-8"));
QByteArray _data = QString(QJsonDocument(data).toJson()).toUtf8();
reply = access->put(request, _data);
return true;
}
bool NetDataAccess::deleteItem(QJsonObject&& data)
{
QNetworkRequest request;
QString url = server;
url += "/" + data["id"].toString();
request.setUrl(QUrl(url));
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=utf-8"));
reply = access->deleteResource(request);
return true;
}
std::unique_ptr<NetDataAccess>& NetDataAccess::instance()
{
if(dataAccess == nullptr)
{
dataAccess = std::unique_ptr<NetDataAccess>(new NetDataAccess);
}
return dataAccess;
}