安卓cursor.moveToNext()遍历sqlite数据库次数错误

问题遇到的现象和发生背景

在学习并尝试从sqlite读取数据并展示在listview中,我的sqlite数据库中只有39行数据,然而用while (cursor.moveToNext());却会一直循环702次。

问题相关代码
    Cursor cursor = db.rawQuery("select * from foodTable",null);
    Integer xhcs =0 ;
    while (cursor.moveToNext()); {
        list.add(new FoodList(cursor.getString(cursor.getColumnIndex("foodname"))
                , cursor.getString(cursor.getColumnIndex("exclude"))
                , cursor.getString(cursor.getColumnIndex("resid"))));
        xhcs=xhcs+1; //记录循环次数}
    cursor.close();
    db.close();

    for (int i = 0; i < list.size(); i++) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("foodname", list.get(i).foodname);
        map.put("exclude", list.get(i).exclude);
        map.put("resid", list.get(i).resid);
        listitem.add(map);
    }
    Log.d(TAG,xhcs.toString());
运行结果及报错内容

运行后在正确的生成一轮item之后会继续从第一个item开始再重复多轮。

我的解答思路和尝试过的方法

在数据库里用select * from foodTable语句能正常返回39条结果,用select count(*) from foodTable也返回39
尝试过用cursor.moveTofirst定位或是用while(!cursor.isAfterLast()),依然会循环702次。

我想要达到的结果

正确循环39次后停止,想知道为啥会这样。。702/39=18次,也就是说多循环了18次。。就算算上列我的数据库也才39*6=234个格子。。

用for循环试试:

if(cursor.moveToFirst()){
for(int i=0;i<cursor.getCount();i++{


cursor.move(i);
list.add(new FoodList(cursor.getString(cursor.getColumnIndex("foodname"))
                , cursor.getString(cursor.getColumnIndex("exclude"))
                , cursor.getString(cursor.getColumnIndex("resid"))));
        xhcs=xhcs+1; //记录循环次数}

。。。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632