-1

我使用这种方法,我得到了 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.

当我将此代码放入我的 while 布尔值中时:

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;   
    }
4

1 回答 1

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 < 5 时,你有你,但在 do 语句中你继续设置 i = 0。

这将导致 i 每次都设置为 0,然后您将永远无法达到 i=5 并且您将被困在那里消耗资源。我将达到的最高值也是1。

我建议在 do 语句之前设置 i = 0 ,因此它不在循环内。

解决这个问题,希望它会起作用。

于 2013-05-18T17:33:30.857 回答