上一篇对Firebase进行了简要的介绍。
今天对Firebase进行简单的应用。在qt中,因为我不会Android和ios开发。
代码出自github:
https://github.com/clkasd/qt-firebaseapi
最主要的就是写一个类,Firebase.
直接代码:
firebase.h
#ifndef FIREBASE_H#define FIREBASE_H#include <QObject>#include <QtNetwork/QNetworkAccessManager>#include <QtNetwork/QNetworkReply>#include <QtNetwork/QNetworkRequest>#include <QUrl>#include <QUrlQuery>#include <QDebug>#include <QtGlobal>#include <datasnapshot.h>class Firebase : public QObject{ Q_OBJECTpublic: explicit Firebase(QObject *parent = 0); Firebase(QString hostName,QString child); Firebase(QString hostName); void init(); void setValue(QString str); void getValue(); void deleteValue(); void setToken(QString); void listenEvents(); Firebase* child(QString childName);signals: void eventResponseReady(QString); void eventDataChanged(DataSnapshot*);public slots: void replyFinished(QNetworkReply*); void onReadyRead(QNetworkReply*); void eventFinished(); void eventReadyRead();private: QString host; QString firebaseToken=""; QNetworkAccessManager *manager; QString currentNode; QString latestNode; QString buildPath(int); QString createJson(QString); void open(const QUrl &url); QByteArray trimValue(const QByteArray &line) const;};#endif // FIREBASE_H
- 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
firebase.cc
#include "firebase.h"#include <string.h>#include <QIODevice>#include <QBuffer>#include <QJsonDocument>#include <datasnapshot.h>Firebase::Firebase(QObject *parent) : QObject(parent){}void Firebase::init(){ manager=new QNetworkAccessManager(this); connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));}Firebase::Firebase(QString hostName){ host=hostName; currentNode=""; init();}void Firebase::setToken(QString token){ firebaseToken=token;}Firebase::Firebase(QString hostName,QString child){ host=hostName .append(child).append("/"); latestNode=child; init();}Firebase* Firebase::child(QString childName){ Firebase *childNode=new Firebase(host,childName); childNode->setToken(firebaseToken); return childNode;}void Firebase::open(const QUrl &url){ QNetworkRequest request(url); request.setRawHeader("Accept", "text/event-stream"); QNetworkReply *_reply = manager->get(request); connect(_reply, &QNetworkReply::readyRead, this, &Firebase::eventReadyRead); connect(_reply, &QNetworkReply::finished, this, &Firebase::eventFinished);}void Firebase::eventFinished(){ QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender()); if (reply) { QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); if (!redirectUrl.isEmpty()) { reply->deleteLater(); open(redirectUrl); return; } reply->deleteLater(); }}void Firebase::eventReadyRead(){ QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender()); if(reply) { QByteArray line=reply->readLine(); if(!line.isEmpty()) { QByteArray eventName=trimValue(line); line=reply->readAll(); if(eventName=="put") { DataSnapshot *dataSnapshot=new DataSnapshot(line); emit eventDataChanged(dataSnapshot); } } } reply->readAll();}void Firebase::onReadyRead(QNetworkReply *reply){ /*qDebug()<<"incoming data"; qDebug()<<reply->readAll();*/}void Firebase::replyFinished(QNetworkReply *reply){ //qDebug()<<reply->readAll(); QString data=QString(reply->readAll()); emit eventResponseReady(data);}void Firebase::setValue(QString strVal){ //Json data creation QNetworkRequest request(buildPath(1)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QBuffer *buffer=new QBuffer(); buffer->open((QBuffer::ReadWrite)); buffer->write(createJson(strVal).toUtf8()); buffer->seek(0); /* * To be able to send "PATCH" request sendCustomRequest method is used. * sendCustomRequest requires a QIOdevice so QBuffer is used. * I had to seek 0 because it starts reading where it paused. */ manager->sendCustomRequest(request,"PATCH",buffer); buffer->close();}void Firebase::getValue(){ QNetworkRequest request(buildPath(0)); manager->get(request);}void Firebase::listenEvents(){ open(buildPath(0));}void Firebase::deleteValue(){ QNetworkRequest request(buildPath(0)); manager->deleteResource(request);}QString Firebase::createJson(QString str){ QString data=QString(QString("{").append("\"").append(latestNode).append("\"").append(":").append("\"").append(str).append("\"").append(QString("}"))); return data;}QString Firebase::buildPath(int mode){ QString destination=""; if(mode) { host.replace(QString("/").append(latestNode).append("/"),""); destination .append(host) .append("/.json"); } else { destination .append(host) .append(currentNode) .append(".json"); } if(!firebaseToken.isEmpty()) destination.append("?auth=").append(firebaseToken); //根据你的实际情况,写destination return destination;}QByteArray Firebase::trimValue(const QByteArray &line) const{ QByteArray value; int index = line.indexOf(':'); if (index > 0) value = line.right(line.size() - index - 1); return value.trimmed();}
- 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
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow