Android应用自定义类实现公式调用SQLite数据后ListView不显示问题
问题排查清单
1. 最直接原因:Cursor指针未复位
你从dbHelper.getdata()拿到的Cursor对象res,在第一个while循环已经遍历到了最后一行,此时res.moveToNext()直接返回false,第二个填充ListView数据的while循环根本不会执行,Adapter里没有任何数据,自然不会显示。
修复方案:第二个循环开始前调用res.moveToPosition(-1)复位指针,或者重新调用dbHelper.getdata()获取新的Cursor。
2. DBHelper存在多处逻辑错误,可能导致数据库无数据
updateSubtaskData方法的where条件写错:表中主键字段是subtaskname,但你写的是"name=?",所有更新操作都会失败insertSubtaskData方法字段名大小写不匹配:建表时的字段是全小写的prihigh/primed/prilow/timemore/timemed/timeless,但insert时用了驼峰命名priHigh/priMed等,若SQLite开启大小写敏感会导致插入失败onUpgrade方法逻辑错误:升级时删除的是不存在的Userdetails表,不会清空旧的Subtaskdata表,可能导致表结构异常
3. MyViewModel存在崩溃风险,可能导致页面提前终止
- 成员变量
timeInt没有初始化,默认值为0,计算timeConstant = totalTime / timeInt时会触发除以0崩溃 - 若传入的
list为空,调用list.get(0)会触发索引越界崩溃 - Cursor遍历逻辑错误:每次遍历都会覆盖
totalTime和timeConstant,最终返回的是最后一条数据的计算结果,不符合业务预期
4. ListView刷新逻辑缺失
- 调用
adapter.addANewSubTask添加数据后,若你的自定义SubtaskDetailAdapter的add方法没有主动调用notifyDataSetChanged(),列表不会刷新渲染 - 第二个while循环中你第一行就把
looponeran设为false,就算Cursor有数据也只会添加第一条,后续数据全部被跳过
内容的提问来源于stack exchange,提问作者Aadhitya Sachdeva
相关产品推荐
相关产品推荐

