2017-11-17 115 views
0

enter image description here我想检索通过随时随地使用随机密钥更新到Firebase的温度值。我想根据实时数据显示应用中的温度值。我尝试使用addValueEventListner,但似乎没有实时更改值。 `公共类SecondActivityB扩展AppCompatActivity {跨随机密钥检索子值-Firebase

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

所以你是指你的数据的问题。

您的数据的位置是:

水培监控系统/地区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); 
     } 



    } 

并且您应该现在阅读每个级别的按键的温度。

+0

好吧,它的工作原理。谢谢 –

+0

很高兴帮助,请确保接受,以便其他人知道这是正确的。 –

+0

是否可以创建另一个textView,以便在更新读数后显示以前的值(温度)? –