我使用这个方法,我得到了while循环堆栈溢出。 没有错误消息或崩溃。我在我的日志猫中得到了这个:
05-18 20:17:16.528: W/InputEventReceiver(19831): Attempted to finish an input event but the input event receiver has already been disposed.
当我把这段代码放在我的布尔值中时:
data.numberOfSameDateRows(selectedDay) != 0
循环很好。 但是当我像下面那样使用它时,我发现了堆栈溢出。
if(data.numberOfSameDateRows(selectedDay) != 0)
i=0;
else
i++;
感谢帮助:)
这是我的代码:
DataBaseMain data = new DataBaseMain(this);
data.open();
SimpleDateFormat dateFormatter = new SimpleDateFormat("d-MMMM-yyyy");
String dateWanted = getCorrectDate(removeSpinner);
Date wantedDate = new Date();
int i = 0;
try {
wantedDate = dateFormatter.parse(dateWanted);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar myCal = new GregorianCalendar();
myCal.setTime(wantedDate);
Date newDate = myCal.getTime();
String selectedDay = dateFormatter.format(newDate);
if(dateWanted.equals("all") == false){
do{
if(data.numberOfSameDateRows(selectedDay) != 0)
i=0;
else
i++;
myCal.add(Calendar.DAY_OF_YEAR, 7);
newDate = myCal.getTime();
selectedDay = dateFormatter.format(newDate);
}
while(i < 5);
public int numberOfSameDateRows(String date){
int i = 0;
String[] columns = new String[]{COLUMN_DATE};
Cursor c = ourDatabase.query(TABLE_NAME, columns, COLUMN_DATE + "= '" + date + "'", null, null, null, null);
if(c.getCount() >= 1)
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
i++;
}
return i;
}
答案 0 :(得分:1)
看起来像一个无限循环。因此永远不会结束并导致堆栈溢出。
do{
if(data.numberOfSameDateRows(selectedDay) != 0)
i=0;
else
i++;
myCal.add(Calendar.DAY_OF_YEAR, 7);
newDate = myCal.getTime();
selectedDay = dateFormatter.format(newDate);
}
while(i < 5);
你设定为i&lt; 5但在do语句中你一直设置i = 0.
这将导致我每次设置为0,然后你永远不会达到i = 5,你将陷入消耗资源。我将达到的最高值是1.
我建议在do语句之前设置i = 0,这样它就不在循环中。
修复此问题并希望它能够正常工作。