Я пытаюсь построить график в реальном времени в своем приложении, используя значения, присутствующие в базе данных. Я могу показать обновленное значение в файле TextView
. Также вместо добавления значений с другим идентификатором (автоматически выделяемым в firebase) я обновляю те же параметры. Например, я обновляю параметр «temp», а не добавляю новый дочерний элемент в дерево каждый раз, когда хочу отправить данные в firebase. Я не могу найти соответствующие коды или предложения о том, как отображать значение «temp» на моем графике.
Я пытался использовать GraphView
учебники и MpAndroidChart
, но все они работают со структурой базы данных, как показано в этом [руководстве] (https://www.youtube.com/watch?v=d_96yv3Ppu4). И у меня есть такая структура, как [эта] (https://imgur.com/kWzbavZ). Я не смог получить ни одной точки на моем графике.
Это мой урок рисования. Temp - это значение, которое я хочу построить, lastX - это просто переменная оси X. В функции Addentry() была строка series.appendData(new DataPoint(lastX, Double.parseDouble(temp)),true,10);
, но я удалил ее, так как temp не был доступен в этом классе.
reff = FirebaseDatabase.getInstance().getReference().child("sensor");
series = new LineGraphSeries<DataPoint>();
reff.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
lastX++;
String temp = dataSnapshot.child("temp").getValue().toString();
int sajal = Integer.parseInt(temp);
series.appendData(new DataPoint(lastX, Double.parseDouble(temp)),true,10);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
GraphView graph = (GraphView) findViewById(R.id.temp_graph)
graph.addSeries(series);
Viewport viewport = graph.getViewport();
viewport.setYAxisBoundsManual(true);
viewport.setMinY(0);
viewport.setMaxY(10);
viewport.setScrollable(true);
@Override
public void onResume() {
super.onResume();
// we're going to simulate real time with thread that append data to the graph
new Thread(new Runnable() {
@Override
public void run() {
// we add 100 new entries
for (int i = 0; i < 100; i++) {
runOnUiThread(new Runnable() {
@Override
public void run() {
addEntry();
}
});
// sleep to slow down the add of entries
try {
Thread.sleep(600);
} catch (InterruptedException e) {
// manage error ...
}
}
}
}).start();
}
public void addEntry() {
// here, we choose to display max 10 points on the viewport and we scroll to end
}
}
Я хочу отображать значения, хранящиеся в параметре «temp», но сейчас я получаю пустой график.
graph.addSeries(series);
данные еще не были загружены, а вашonDataChange
еще не был вызван. Любой код, которому требуются данные, должен быть внутри обратного вызоваonDataChange
, который вызывается, когда данные доступны с сервера, поэтому вызовgraph.addSeries(series);
должен быть внутриonDataChange
. - person Frank van Puffelen   schedule 24.03.2019