Android替换我的双数组列表中的空值
我正在我的应用程序中使用achartengine。他们添加了一个处理空值的功能,但是为了正确地处理它们,您需要MathHelper.null\u值来代替空值。图形需要一个List Double[](双数组列表)才能正确显示数据。我的代码循环遍历一个游标,填充一个Double列表,将Double列表转换为Double[],然后最后将Double[]添加到我的列表Double[] 我试着在循环中放入if/else语句,如果column_TEMP为null,那么cvalue=MathHelper.null_VALUE,但它在需要之前就进行了计算,结果是灾难性的(它失败了)。图形没有正确填充,在屏幕的最底部有一条小线,只显示了2个点,而不是10个点。在MathHelper.NULL_值位于列表Double[]中之前,它无法对其进行计算。我正在试图找到一种方法,当它从Double[]变为List Double[]时,可以更改空值。这是我目前使用的代码。它使空值在图形上显示为0。如果有一个空值,使用较大数字的图形可能会非常混乱。你可以从几百一直到零,然后又回到几百。非常感谢您的任何建议Android替换我的双数组列表中的空值,android,arrays,string,list,double,Android,Arrays,String,List,Double,我正在我的应用程序中使用achartengine。他们添加了一个处理空值的功能,但是为了正确地处理它们,您需要MathHelper.null\u值来代替空值。图形需要一个List Double[](双数组列表)才能正确显示数据。我的代码循环遍历一个游标,填充一个Double列表,将Double列表转换为Double[],然后最后将Double[]添加到我的列表Double[] 我试着在循环中放入if/else语句,如果column_TEMP为null,那么cvalue=MathHelper.nu
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);
编辑:
我发现了一个问题。在我的while循环中,我把这个代码
Double d=MathHelper.NULL_VALUE;
String s=Double.toString(d);
Log.i(getClass().getSimpleName(), s);
它记录为0.0,但低于我的chartfactory设置(在循环之外),我将
相同的代码,它返回了1.7976931348623157E308,与预期的一样。为什么?
while循环是否会导致它返回0.0?不清楚添加if语句是什么意思,因为您没有包含代码,而且“结果非常糟糕(失败)”也不是很具体——错误消息可能会有所帮助 无论如何,鉴于提供的信息,以下是我期望的工作: 更改此项:
cValue.add(cvalue);
为此:
cValue.add(cvalue == null ? MathHelper.NULL_VALUE : cvalue);
一些与您的问题没有直接关系的建议:
- 不要在同一范围内使用名称仅因单个内部字母大小写不同的变量
与FooBar
是可以的(虽然FooBar
在Java中应该是类名,而不是变量),但是FooBar
与FooBar
太容易混淆FooBar
- 我不知道你为什么把Dvalue和cValue作为字段。看起来它们只是持有临时值,所以本地值更合适
- 在Java中,标准约定是只有类具有类似
的名称。变量应以小写字母开头。(根据您对“变量”的定义,例外情况是常数,这些常数都是带下划线的大写字母Dvalue
),如_THIS
- 零长度数组在Java中是不可变的,因此在给定类型中拥有多个数组没有任何意义。您可以将它们保存在常量中(即:
字段)并重用它们。或者,在本例中,您知道所需数组的长度,因此可以在调用static final
之前分配适当大小的数组toArray
谢谢你的帮助Laurence:)旁白:将名为
cvalue
和cvalue
的变量放在同一个范围内是很容易出错的。我同意通常是这样,但这让我更容易从一个双精度变量变为一个列表。我觉得我的大脑不对劲,哈哈。cValue
和cValues
或者甚至是cValueList
cValue
与cValue
相比,不要说它们有什么不同。那肯定会更好。一旦最后的代码运行起来,我会把它清理干净。谢谢:)首先,谢谢你提供的所有信息。cvalue和cvalue只在这一个区域中使用,所以一旦通过了这个,我就不必担心它们混淆了。不过我明白你的意思。我不知道为什么我用Dvalue而不是Dvalue,那天我可能只是累了,打错了。我回去收拾一下:)。大小数组总是根据用户在数据库中记录临时值的次数而变化。此外,数组列表中可能只有一个数组,但最多可以有4个。我尝试了cValue.add(cValue==null?MathHelper.null\u值:cValue);但它与以前一样,空值只显示为0,而不是空白。
cValue.add(cvalue == null ? MathHelper.NULL_VALUE : cvalue);