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