通过随机密钥检索子值-Firebase

时间:2017-11-17 23:16:24

标签: android firebase firebase-realtime-database

enter image description here我想检索随着时间的推移使用随机密钥更新到Firebase的温度值。我想根据实时数据显示app中的温度值。我尝试使用addValueEventListner,但似乎值没有设法实时更改。 `public class 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 个答案:

答案 0 :(得分: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);
         }



    }

你现在应该阅读每个按键级别的temp。