安卓线图

问题描述 投票:0回答:1

我想用Firebase实时数据库中的数据在Android中制作一个线形图。

这是该数据库的结构。

请在这里输入图片描述

这是代码。

public class TemperaturaActivity extends AppCompatActivity {

    private LineChart Temp_linechart;
    ArrayList<Entry> yData;
    ValueEventListener valueEventListener;
    DatabaseReference mPostReference;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_temperatura);
        Temp_linechart = (LineChart) findViewById(R.id.linechart1);

        mPostReference = FirebaseDatabase.getInstance().getReference("dht");
        mPostReference.addValueEventListener(valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                yData = new ArrayList<>();
                float i = 0;
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    i = i + 1;
                    String SV = ds.child("temp").getValue().toString();
                    Float SensorValue = Float.parseFloat(SV);
                    yData.add(new Entry(i, SensorValue));
                }
                final LineDataSet lineDataSet = new LineDataSet(yData, "Temp");
                lineDataSet.setLineWidth(4);
                LineData lineData = new LineData(lineDataSet);
                Temp_linechart.clear();
                Temp_linechart.setData(lineData);
                //Temp_linechart.notifyDataSetChanged();
                Temp_linechart.invalidate();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

我的线图中没有收到任何数据,我不知道为什么。

android firebase-realtime-database linechart
1个回答
0
投票

为了得到以下的值 temp 属性,请使用以下几行代码。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference dhtRef = rootRef.child("sensor").child("dht");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            double temp = ds.child("temp").getValue(Double.class);
            Log.d("TAG", name);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
dhtRef.addListenerForSingleValueEvent(valueEventListener);

在logcat中的结果将是以下的值 temp 属性。

32.7
32.7
32.7

我不熟悉那个线图库 但现在有了这些值,你就可以为所欲为了。

P.S.总是添加对所有存在于你的引用中的节点的调用,包括那个对 .child("sensor").

© www.soinside.com 2019 - 2024. All rights reserved.