我有一段代码在99%的安装上运行良好,但导致HTC Desire手机上出现无限循环。Android:奇怪的GregorianCalendar行为
我想要做的是创建一个数据可用的月份列表。我从数据可用的第一个日期开始,然后使用循环,直到我到达现在。
下面是代码(简化):
GregorianCalendar today = new GregorianCalendar();
GregorianCalendar xCal = new GregorianCalendar();
xCal.setTime(startDate);
xCal.set(GregorianCalendar.DAY_OF_MONTH, resetDay); // resetDay = end of billing period
while(xCal.before(today))
{
MonthObject xObj = new MonthObject(); // Create object to hold information
xObj.setTimestamp(xCal.getTimeInMillis()); // Save timestamp for start of period
xObj.setFromDate(xCal.getTime()); // Save date for start of period
xCal.add(GregorianCalendar.MONTH, 1); // Increment by 1 month
xCal.set(GregorianCalendar.DAY_OF_MONTH, resetDay); // set to end of billing period
xCal.set(Calendar.HOUR_OF_DAY, 0); // make sure it's midnight
xCal.set(Calendar.MINUTE, 0);
xCal.set(Calendar.SECOND, 0);
xCal.set(Calendar.MILLISECOND, 0);
xObj.setToDate(xCal.getTime()); // Save timestamp for end of period
xObj.setToTimestamp(xCal.getTimeInMillis()); // Save date for end of period
Log.v("NetworkCheck", "Added MonthObject - " + xObj.fromDate.toGMTString() + " to " + xObj.toDate.toGMTString());
dates.add(xObj); // Add to collection
xObj = null;
}
xCal = null;
today = null;
因此,在手机的99%,这给期望的结果(个月的列表)。然而,在一些手机上,我得到这个输出:
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
D/NetworkCheck(2311): Added MonthObject - 30 Aug 2010 22:00:00 GMT to 30 Aug 2010 22:00:00 GMT
我绝对不知道这是为什么。有没有人遇到类似的问题?
谢谢!
安德烈亚斯