Как отображать данные, полученные из базы данных Firebase, в Android?

Я пытаюсь построить график в реальном времени в своем приложении, используя значения, присутствующие в базе данных. Я могу показать обновленное значение в файле 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», но сейчас я получаю пустой график.


comment
Взгляните на этот вопрос. Ответ на этот вопрос объясняет, как вы можете справиться с этой ситуацией и что ее вызывает.   -  person André Kool    schedule 24.03.2019
comment
@AndréKool Спасибо за ваш ответ. Вопрос, который вы задали, касается невозможности загрузки данных в приложение, но моя проблема не в этом. Я могу получить данные, но не могу отобразить их на графике.   -  person Sajal    schedule 24.03.2019
comment
Нет, та же проблема с разными результатами. Если вы добавите операторы журнала, как указано в ответе Фрэнка на этот вопрос, вы увидите, что во время создания графика ваши данные еще не загружен.   -  person André Kool    schedule 24.03.2019
comment
Данные загружаются из Firebase асинхронно. К моменту вызова вашего graph.addSeries(series); данные еще не были загружены, а ваш onDataChange еще не был вызван. Любой код, которому требуются данные, должен быть внутри обратного вызова onDataChange, который вызывается, когда данные доступны с сервера, поэтому вызов graph.addSeries(series); должен быть внутри onDataChange.   -  person Frank van Puffelen    schedule 24.03.2019