我目前正在做一个项目,该项目使用Arduino收集数据并将数据存储在云端,并将数据显示在移动应用程序的云端。从我尝试过的情况来看,Arduino只能将数据上传到Firebase实时数据库,但我的Flutter移动应用程序需要将数据存储在FiRest中。当实时数据库发生变化时,有没有办法将firebase实时数据库数据自动写入Fiback?
这是实时数据库结构:实时数据库结构
我想将数据附加到Firestore中的相应字段中,如下所示:firestore结构
我尝试过每5秒读取一次数据并将其写入Firebase,但似乎不是很有效:
final userDbRef = FirebaseDatabase.instance.ref("user/");
String uid = globals.uid;
Stream<DatabaseEvent> stream = userDbRef.onValue;
// Subscribe to the stream!
var subscription = stream.listen((DatabaseEvent event) {
// print('Listening');
dynamic values = event.snapshot.value;
final data = new Map<String, dynamic>.from(values);
globals.temp = data['temp'];
globals.hr = data ['hr'];
globals.spo2 = data['spo2'];
globals.position = data['position'];
globals.time = DateTime.parse(data['time']);
});
subscription.pause();
String date = DateTime.now().add(const Duration(hours: 8)).toString().substring(0, 10);
dynamic result = await DatabaseService(uid: uid).getUserData('patient');
if (result[date].toString() == 'null') {
await DatabaseService(uid: uid).updateSingleUserData('patient', {
date: {
'time': ['${date} 00:00:00.000'],
'hr': [95],
'temp': [36.5],
'spo2': [98],
'position': ['lying'],
},
});
} else {
List timeList = result[date]['time'];
List hrList = result[date]['hr'];
List tempList = result[date]['temp'];
List spo2List = result[date]['spo2'];
List positionList = result[date]['position'];
if ((!timeList.contains(globals.time.toString())) & (globals.time.toString() != 'null')) {
timeList.add(globals.time.toString());
hrList.add(globals.hr);
tempList.add(globals.temp);
spo2List.add(globals.spo2);
positionList.add(globals.position);
await DatabaseService(uid:uid).updateSingleUserData('patient', {
date: {
'time': timeList,
'hr': hrList,
'temp': tempList,
'spo2': spo2List,
'position': positionList,
},
});
}
}
subscription.resume();
谢谢。
有没有办法在实时数据库发生变化时,将firebase实时数据库数据自动写入Firestore?
是的,一种常见的方法是使用云函数,该函数在每次将新节点添加到实时数据库时自动触发。云功能在后端执行,即在Firebase/ Google Cloud基础架构上执行,因此您无需在Flutter应用程序中为此数据镜像/传输编写任何代码。
下面是一个包含通用路径的简单示例:
// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');
// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();
exports.duplicateToFirestore = functions.database.ref('/myRTDBPath/{pushId}')
.onCreate((snapshot, context) => {
// Grab the current value of what was written to the Realtime Database.
const nodeVal = snapshot.val();
// Write it to a Firestore collection
return admin.firestore().collection('myFirestoreCollection').add(nodeVal);
});
我允许您将RTDB节点值转换为您正在寻找的Firestore文档结构。
我有一个关于firebase实时数据库规则的问题。 有人创建了一个帐户,该帐户在实时数据库中创建了一个路径: 结构很简单(密钥、用户ID和其他数据)。 这是我的规则: 但现在问题来了。如何允许用户写入此对象?每个拥有代码的人(请参阅BQUyhq)w3D)都可以写入对象id。如果没有代码,他们就无法写入对象id。 有可能发生这样的事吗?如果是的话,我该怎么做呢。
我设法将数据插入身份验证,但无法插入数据库: 代码: 错误: E/AndroidRuntime:致命异常:主进程:com。实例budgetingapp,PID:11507 java。lang.RuntimeException:在类androidx上找到了名称getText的冲突获取程序。appcompat。小装置。AppCompativeText位于com。谷歌。火基。消防商店。util。Cust
firebaseDatabase=firebaseDatabase.getInstandatabaseReference=firebaseDatabase.getReference()Query Query=databaseReference.child(“ticket_detail”).orderbychild(“ticket_no”).limittoLast(1);AddListenerFor
我正在尝试用Firebase制作一个简单的Android应用程序。 目前,我只是试图从Firebase实时保存用户数据库。但由于某种原因它不起作用。另一方面,身份验证工作完美。 数据库本身没有显示任何内容。它总是显示“null” 我一直在关注这个YouTube教程,并一直在做一些类似的事情。 当我尝试创建一个用户并将其发送到数据库时,运行的程序没有给出任何答案。我有一个进度条,一旦setValue
首先,我很抱歉我的英语,我希望你能理解。这是我的第一个android应用程序,我尝试使用Firebase进行身份验证和数据库。身份验证工作正常,但我不能读写实时数据库。以下是我的数据库规则和结构: 我试图将数据库中的数据添加到reclyclerview中,但我的代码止步于AddValueEventListener。然后我尝试添加一个简单的数据到数据库,但它也不起作用。我也尝试将相同的代码放入一个活