2017-11-17 114 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,以便在更新讀數後顯示以前的值(溫度)? –