YaphetHayate 2022-02-16 20:30 采纳率: 100%
浏览 176
已结题

安卓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个格子。。

  • 写回答

2条回答 默认 最新

  • 关注

    用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; //记录循环次数}
    
    。。。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 有问必答小助手 2022-02-17 16:02
    关注
    您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
    PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月17日
  • 已采纳回答 2月17日
  • 创建了问题 2月16日

悬赏问题

  • ¥15 MICE包多重插补后数据集汇总导出
  • ¥15 一道算法分析问题(关于3-MSAT)
  • ¥15 C++ FLUENT 化学反应速率 编写困难
  • ¥15 Python嵌套交叉验证
  • ¥20 有关于C# Winform的问题
  • ¥15 linuxkit+elasticsearch
  • ¥15 兄得萌6.13do题😭😭大一小东西的work
  • ¥15 投不到原始数据,gdal投影代码
  • ¥20 卷积混响的代码帮写。。
  • ¥88 借助代码处理雷达影像,识别任意区域洪水前后的被淹没区域,并可视化展示。