Линейная диаграмма MPAndroid с модификацией - отображение данных за недели и месяцы - PullRequest
1 голос
/ 18 июня 2019

Попытка вытащить данные из MySQL на Android с помощью Retrofit и вывести линейный график. Первая часть (данные извлечения) работает нормально. Фильтрация данных в MPALinechart в Android оказывается сложной задачей.

Мне бы хотелось, чтобы линейный график показывал настроение пользователя с течением времени. Таким образом, нижней осью будет январь, февраль, март и т. Д., А левой осью будет их настроение.

Настроения ранжируются от 0 до 4, где 0 - отрицательное настроение, подобное депрессии, а 4 - положительное настроение, как выход. Идея состоит в том, что линия покажет человеку его настроение с течением времени, и они смогут увидеть, в какие недели / месяцы его настроение упало.

Мой код до сих пор:

 // Retrofit call to the MYSQL server.
    Call<List<MoodLogLineGraph>> call =  RetrofitClient.getInstance().getApi().moodLogLineGraph(userId);
    call.enqueue(new Callback<List<MoodLogLineGraph>>() {
        @Override
        public void onResponse(Call<List<MoodLogLineGraph>> call,  Response<List<MoodLogLineGraph>> response) {

            // All JSON entries form the MYSQL server are parsed into an ArrayList.
            ArrayList<Entry> dataVals = new ArrayList<Entry>();

            // For loop which dynamically adds all entries to the ArrayList
            for (MoodLogLineGraph moodLogList : response.body()) {
                moodLogList.getMoodName();
                moodLogList.getPosted();


                if (moodLogList.getMoodName().equals("Excited")) {
                    dataVals.add(new Entry(1, 3));
                }
                if (moodLogList.getMoodName().equals("Happy")) {
                    dataVals.add(new Entry(1, 1));
                }
                if (moodLogList.getMoodName().equals("Fine")) {
                    dataVals.add(new Entry(1, 0));
                }
                if (moodLogList.getMoodName().equals("Calm")) {
                    dataVals.add(new Entry(1, 1));
                }
                if (moodLogList.getMoodName().equals("Upset")) {
                    dataVals.add(new Entry(1, 1));
                }
                if (moodLogList.getMoodName().equals("Stressed")) {
                    dataVals.add(new Entry(1, 0));
                }
                if (moodLogList.getMoodName().equals("Anxious")) {
                    dataVals.add(new Entry(1, 1));
                }
                if (moodLogList.getMoodName().equals("Confused")) {
                    dataVals.add(new Entry(1, 1));
                }
                if (moodLogList.getMoodName().equals("Guilty")) {
                    dataVals.add(new Entry(1, 1));
                }
                if (moodLogList.getMoodName().equals("sad")) {
                    dataVals.add(new Entry(1, 1));
                }
                if (moodLogList.getMoodName().equals("Depressed")) {
                    dataVals.add(new Entry(1, 0));
                }
            }

     //Initialising the PieChart variables which control the presentation.
            LineDataSet lineDataSet1 = new LineDataSet(dataVals,"");
            lineDataSet1.setColors(color);
            lineDataSet1.setValueTextSize(14);
            LineData lineDataSet = new LineData(lineDataSet1);

            mLineChart.setData(lineDataSet);
            mLineChart.invalidate();
            mLineChart.setDrawGridBackground(false);
            mLineChart.setTouchEnabled(true);
            mLineChart.setDragEnabled(true);
            mLineChart.setScaleEnabled(true);
            mLineChart.setPinchZoom(true);

            XAxis xl = mLineChart.getXAxis();
            xl.setAvoidFirstLastClipping(true);
            xl.setPosition(XAxis.XAxisPosition.BOTTOM);
            final String[] months = new String[]{"Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Sep", "oct", "Nov", "Dec"};
            IAxisValueFormatter formatter = new IAxisValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {
                    return months[(int) value];
                }
            };


            xl.setGranularity(1f); // minimum axis-step (interval) is 1
            xl.setValueFormatter(formatter);
            YAxis leftAxis = mLineChart.getAxisLeft();
            leftAxis.setInverted(true);
            YAxis rightAxis = mLineChart.getAxisRight();
            rightAxis.setEnabled(false);

Я не знаю, как использовать каждую строку данных и отображать ее на графике с течением времени. Это должно быть сделано динамически из базы данных, а не жестко закодировано. Если бы кто-нибудь мог помочь мне получить этот код и запустить его, я был бы очень благодарен.

...