Я работаю с achartengine в моем приложении. Они добавили функцию для обработки нулевых значений, но для их правильной обработки необходимо, чтобы MathHelper.NULL_VALUE находился вместо нулевого значения. График нуждается в List Double [] (список двойных массивов), чтобы правильно отображать данные. Мой код проходит по курсору, заполняет список пар, преобразует список пар в Double [], а затем добавляет Double [] в мой список Double [].
Я попытался поместить оператор if / else в цикл, говоря, что если column_TEMP имеет значение null, то cvalue = MathHelper.NULL_VALUE, но он выполняет вычисления до того, как это необходимо, и результаты были довольно катастрофическими (не удалось). График не заполнялся должным образом, имея одну маленькую линию в самом низу экрана, и отображал только 2 точки вместо 10. Он не может выполнять вычисления для MathHelper.NULL_VALUE до тех пор, пока он не окажется в двойном списке []. Я пытаюсь найти способ изменить нулевые значения, когда он переходит из Double [] в List Double []. Вот код, который я сейчас использую. Как есть, нулевые значения отображаются на графике как 0. Графики, использующие большие числа, могут быть испорчены, если есть одно нулевое значение. Вы можете пройти от нескольких сотен до нуля из ниоткуда, а затем снова вернуться к нескольким сотням. Любые предложения очень ценятся.
private List<Double[]> values;
private List<Double> cValue;
private Double[] Dvalue;
while (cursor.moveToNext()) {
try {
String cdate=null;
Double cvalue=null;
column_date = cursor.getColumnIndex(Provider.DATE);
column_value = cursor.getColumnIndex(Provider.TEMP);
cdate = cursor.getString(column_date);
cvalue = cursor.getDouble(column_value);
};
SimpleDateFormat curFormater = new SimpleDateFormat("yyyy/MM/dd");
Date dateObj = curFormater.parse(cdate);
if (dateObj.getTime() >= startDate.getTime() &&
dateObj.getTime() <= endDate.getTime()) {
SimpleDateFormat postFormater = new SimpleDateFormat("yyyy,MM,dd");
String dateObj1 = postFormater.format(dateObj);
SimpleDateFormat finalFormater = new SimpleDateFormat("yyyy,MM,dd");
Date dateObj2 = finalFormater.parse(dateObj1);
cDates.add(dateObj2);
cValue.add(cvalue);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
dateValues = cDates.toArray(new Date[0]);
dates.add(dateValues);
Dvalue = (Double[]) cValue.toArray(new Double[0]);
values.add(Dvalue);
Теоретически именно так должен выглядеть массив, но я понятия не имею, как ввести MathHelper.NULL_VALUE в существующий массив.
values.add(new double[] { 21.2, 21.5, 21.7, 21.5, 21.4, 21.4, 21.3, 21.1, 20.6, 20.3, 20.2,
19.9, 19.7, 19.6, 19.9, 20.3, 20.6, 20.9, 21.2, 21.6, 21.9, 22.1, 21.7, 21.5 });
values.add(new double[] { 1.9, 1.2, 0.9, 0.5, 0.1, -0.5, -0.6, MathHelper.NULL_VALUE,
MathHelper.NULL_VALUE, -1.8, -0.3, 1.4, 3.4, 4.9, 7.0, 6.4, 3.4, 2.0, 1.5, 0.9, -0.5,
MathHelper.NULL_VALUE, -1.9, -2.5, -4.3 });
Edit:
Я понял одну проблему. В моем цикле while я поместил этот код
Double d=MathHelper.NULL_VALUE;
String s=Double.toString(d);
Log.i(getClass().getSimpleName(), s);
и он записывает 0.0, но ниже, в соответствии с моими настройками диаграммы (вне цикла), я помещаю
тот же код, и он вернул 1.7976931348623157E308, как и ожидалось. Зачем
будет ли цикл while возвращать 0.0?