gpt4 book ai didi

java - 从 Firebase 真实数据库中获取值以用它们制作图表

转载 作者:行者123 更新时间:2023-11-30 10:02:50 24 4
gpt4 key购买 nike

我想从 Firebase 获取传感器的值并根据该值制作图表。我写了一些代码,但它不起作用。图表应该自动基于数据库中的值,也就是说,图表应该与值完全同步。这是我的数据库:

..sensor
-Lh51ca_FMrRMOA0Ok9B
hum: 36.1
pressure: 1008
temp: 31.2
time: "2019-06-11T13:17:03Z"

-还有很多节点

我使用 GraphView 制作图表

protected void onCreate(){
....
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

for(DataSnapshot myDataSnapshot : dataSnapshot.getChildren())
{
double temp = myDataSnapshot.child("temp").getValue(Double.class);
double hum = myDataSnapshot.child("hum").getValue(Double.class);
series.appendData(new DataPoint(lastXPoint, temp), false, 1000);
series2.appendData(new DataPoint(lastXPoint, hum), false, 1000);
}


}

图表上只出现了两个点,仅此而已。

编辑:

    protected void onCreate(){
....
reference.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {
for(DataSnapshot myDataSnapshot : dataSnapshot.getChildren())
{
lastXPoint +=0.1d;
double temp = myDataSnapshot.child("temp").getValue(Double.class);
double hum = myDataSnapshot.child("hum").getValue(Double.class);
series.appendData(new DataPoint(lastXPoint, temp), false, 1000);
series2.appendData(new DataPoint(lastXPoint, hum), false, 1000);
}
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(DatabaseError firebaseError) { }
});
}

更新。现在图表实时更新。看起来效果不错

reference.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {
lastXPoint +=0.1d;
double temp = dataSnapshot.child("temp").getValue(Double.class);
double hum = dataSnapshot.child("hum").getValue(Double.class);
series.appendData(new DataPoint(lastXPoint, temp), false, 1000);
series2.appendData(new DataPoint(lastXPoint, hum), false, 1000);
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(DatabaseError firebaseError) { }
});

最佳答案

lastXPoint 变量在循环中似乎是常量。因此,您在整个循环中一次又一次地将值附加到图中的同一个 X 点。

您还必须改变 lastXPoint 以绘制包含数据库节点中所有值的连续图形。

编辑:对于重复值问题

一旦数据库更新,addvalueeventlistner 将再次带入所有节点。仅使用下面的最后添加的节点。

Firebase ref = new Firebase("YOUR-URL-HERE/PATH/TO/YOUR/STUFF");

ref.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(FirebaseError firebaseError) { }
});

关于java - 从 Firebase 真实数据库中获取值以用它们制作图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56542866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com