Android折线图

Android Line Chart

我正在尝试使用来自 Firebase 实时数据库的数据在 Android 中制作折线图。

这是数据库的结构:

enter image description here

这是代码:

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) {

            }
        });
    }
}

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

要获取 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").

的调用