enter image description here我想通过使用随时间推移的随机密钥来检索更新为Firebase的温度值。我想根据实时数据在应用程序中显示温度值。我尝试使用addValueEventListner,但似乎该值未能实时更改。公共类SecondActivityB扩展了AppCompatActivity {
private DatabaseReference mDatebase;
private TextView mTempView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second_b);
mDatebase = FirebaseDatabase.getInstance().getReference().child("Region 1").child("Parameter Reading").child("temperature");
mTempView = (TextView) findViewById(R.id.tempvalue);
mDatebase.addValueEventListener(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
String name = dataSnapshot.getValue(String.class);
mTempView.setText("Temperature, C: " + name);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});`}
最佳答案
因此,您引用数据的方式就是问题。
您的数据位置是:
水培监测系统/区域1 /参数读取/ KzB1 ... /温度
读取数据的方式
1区/参数读取/温度
因此您跳过了这个孩子(水培监测系统)。
您面临的问题
现在,孩子(KzB1 ..)或(KzB2 ..)这些都是推键,这意味着您无法引用它们,因为您不知道它们是否被按下。
您可能的解决方案是像这样遍历子级:
更改:
mDatebase = FirebaseDatabase.getInstance().getReference().child("Region 1").child("Parameter Reading").child("temperature");
进入这个
mDatebase = FirebaseDatabase.getInstance().getReference().child("hydroponic-monitoring-system").child("Region 1").child("Parameter Reading");
并在您的值事件监听器中在onDatachange上执行此操作
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
//loop through the keys
for (DataSnapshot datasnap: dataSnapshot.getChildren()){
String name = datasnap.child("temperature").getValue(String.class);
mTempView.setText("Temperature, C: " + name);
}
}
您现在应该阅读每个按键级别的温度。