Qt中简单使用Firebase
来源:互联网 发布:怎么注册淘宝云客服 编辑:程序博客网 时间:2024/04/18 08:04
上一篇对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
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 0
- Qt中简单使用Firebase
- 使用Firebase过程中出现的异常
- Go实战--golang中使用firebase实时数据库(zabawaba99/firego)
- Firebase Android 使用整理
- Android使用firebase
- Android使用Firebase
- Google FireBase的简单介绍
- QT中简单使用SQLITE数据库
- Qt中QTeeWidget的简单使用
- QT中foreach的简单使用
- Qt中使用timer有简单方法
- Qt 中线程QThread的简单使用
- QT中简单使用SQLITE数据库
- 如何使用Firebase创建Android聊天应用程序
- Android使用Firebase无法获取ArrayList数据
- 【Android】Firebase配置与使用(上)
- 【Android】Firebase配置与使用(下)
- Firebase-config 在android中的使用
- Dex文件及Dalvik字节码格式解析
- 如何找资源
- HashBIMap双向Map
- KMP算法详解
- BZOJ 3238: [Ahoi2013]差异【S(后)A(缀)M(树)上DP
- Qt中简单使用Firebase
- SpringCloud分布式开发五大神兽
- 堆的实现
- realm 知识点
- thinkPHP 涉及照片上传的用户信息更新出错
- mysql必知必会——GROUP BY和HAVING
- C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward
- java中String、StringBuffer、StringBuilder的区别
- AsSystemRum 系统提权工具 实现思路及其源码