У меня есть база данных SQLite, содержащая ряд задач и даты, когда эти задачи были выполнены.Затем я добавляю эти даты как PieEntries в круговую диаграмму.Я хотел бы найти разницу между датами на графике и текущей датой.
Идея состоит в том, чтобы установить разные цвета для разных сегментов диаграммы в зависимости от разницы между датами.
Я нашел здесь несколько постов, таких как этот, который я использовал: Разница между двумя датами в Android .Но пока, похоже, ничего не работает.
Ниже мой курсор перебирает базу данных и использует ее, чтобы получить даты и поместить их в PieEntry List.Есть также код, который я использую для вычисления текущей даты, и код для вычисления разницы между теми, которые заполняют график, и текущей датой.
final ArrayList<TaskObject> taskObjects = new ArrayList<>();
if (mCursor != null) {
mCursor.moveToFirst();
do {
TaskObject taskObject = new TaskObject();
taskObject.setTask(mCursor.getString(mCursor.getColumnIndex(TaskEntry.COLUMN_TASK)));
taskObject.setObserver(mCursor.getString(mCursor.getColumnIndex(TaskEntry.COLUMN_OBSERVER)));
taskObject.setDate(mCursor.getString(mCursor.getColumnIndex(TaskEntry.COLUMN_DATE)));
taskObjects.add(taskObject);
} while (mCursor.moveToNext());
float distribution = 100 / taskObjects.size();
List<PieEntry> pieEntries = new ArrayList<>();
for (int i = 0; i < taskObjects.size(); i++) {
pieEntries.add(new PieEntry(distribution, (taskObjects.get(i).getTask()) + "\n" + taskObjects.get(i).getDate()));
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
String pastDateString = taskObjects.get(i).getDate();
Date currentDate = Calendar.getInstance().getTime();
Date pastDate = null;
try {
pastDate = simpleDateFormat.parse(pastDateString);
} catch (ParseException e) {
e.printStackTrace();
}
//Comparing dates
long difference = Math.abs(currentDate.getTime() - pastDate.getTime());
long differenceDates = difference / (24 * 60 * 60 * 1000);
//Convert long to String
String dayDifference = Long.toString(differenceDates);
Log.e("HERE","HERE: " + dayDifference);
}
PieDataSet pieDataSet = new PieDataSet(pieEntries, "Label");
pieDataSet.setColors(ColorTemplate.MATERIAL_COLORS);
PieData pieData = new PieData(pieDataSet);
mPieChart.setData(pieData);
mPieChart.invalidate();
}
mCursor.close();
Идея состоит в том, чтобы вычесть pastDate изcurrentDate для отображения целочисленного значения, которое затем можно использовать для изменения цвета сегмента круговой диаграммы.
РЕДАКТИРОВАТЬ:
List<PieEntry> pieEntries = new ArrayList<>();
for (int i = 0; i < taskObjects.size(); i++) {
pieEntries.add(new PieEntry(distribution, (taskObjects.get(i).getTask()) + "\n" + taskObjects.get(i).getDate()));
mPieDataSet = new PieDataSet(pieEntries, "Versatility Matrix & Qualification Status");
String pastDateString = taskObjects.get(i).getDate();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date d = null;
try {
d = simpleDateFormat.parse(pastDateString);//catch exception
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar pastDate = Calendar.getInstance();
pastDate.setTime(d);
Calendar currentDate = Calendar.getInstance();
long diff = currentDate.getTimeInMillis() - pastDate.getTimeInMillis();
long days = diff/(24*60*60*1000);
int daysDifference = (int) days;
Log.d(TAG, "days in difference = " + daysDifference);
if(daysDifference >= 90) {
mPieDataSet.setColor(Color.RED);
} else if (daysDifference < 90 && daysDifference >= 60) {
mPieDataSet.setColor(Color.YELLOW);
} else {
mPieDataSet.setColor(Color.GREEN);
}
}
PieData pieData = new PieData(mPieDataSet);
mPieChart.setData(pieData);
mPieChart.invalidate();
Этот новый код не возвращает целочисленное значение для разницыв днях и все сегменты графика в настоящий момент отображаются красным цветом.