Android Линейный график - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь создать линейную диаграмму в Android с данными из базы данных Firebase Realtime.

Это структура базы данных:

введите описание изображения здесь

Это код:

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

            }
        });
    }
}

Я не получаю никаких данных в своей линейной диаграмме и не знаю почему.

1 Ответ

0 голосов
/ 09 мая 2020

Чтобы получить значения свойства 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

Я не знаком с этой библиотекой линейных диаграмм, но теперь, имея эти значения, вы можете делать с ними все, что хотите.

PS Всегда добавляйте вызовы ко всем узлам, которые присутствуют в вашей ссылке, в том числе до .child("sensor").

...