You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI安卓应用SQLite数据库读写异常求助

.NET MAUI SQLite 数据集合为空排查建议

1. 验证数据库文件与种子数据状态

  • 定位FileSystem.AppDataDirectory的实际物理路径:Windows路径通常为C:\Users\<用户名>\AppData\Local\<应用包名>,Android在应用私有存储目录,iOS在沙盒路径。手动确认数据库文件是否存在
  • 使用SQLite可视化工具(如DB Browser for SQLite)打开数据库文件,检查Exercises表是否存在,以及种子数据是否成功写入
  • 在种子数据写入代码后添加断点或日志,确认InsertAsync/InsertAllAsync的返回值是否匹配预期插入行数(例如插入3条数据应返回3),排查是否有异常中断写入流程

2. 核查数据库延迟初始化逻辑

  • 确认Lazy<SQLiteAsyncConnection>的初始化逻辑,检查连接字符串中的路径是否与Constants类定义的路径一致
  • 验证获取数据库连接的方法(如GetConnection()),确保每次调用都返回有效实例,且已通过await _connection.CreateTableAsync<Exercise>()完成表创建
  • 排查时序问题:确保种子数据写入和查询操作都在CreateTableAsync执行完成后触发,避免表未创建时执行查询

3. 检查GetExercisesAsync()查询逻辑

  • 确认查询语句正确性:例如是否为await _database.Table<Exercise>().ToListAsync();,排查是否误加过滤条件(如Where(x => x.IsActive == false))导致无数据返回
  • 在方法内部添加断点或日志,直接查看查询返回的列表是否为空。若查询结果为空,问题出在数据库层;若查询有数据但绑定后为空,需再次确认绑定逻辑(即使你认为绑定无误)
  • 为方法添加try-catch块捕获异常,排查是否存在SQLite错误(如表名与实体类名称不匹配、字段类型不兼容)

4. 验证DI与ViewModel初始化

  • 确认ViewModel通过DI注入CalisthenicsTrackerDatabase实例,而非手动创建新实例(手动创建的实例可能使用不同数据库路径)
  • 检查Exercises集合类型:若使用ObservableCollection<Exercise>,确保查询后通过AddRange添加数据,或在重新赋值时触发INotifyPropertyChanged通知
  • 确认Exercises属性正确实现INotifyPropertyChanged,或使用CommunityToolkit.Mvvm的[ObservableProperty]特性

5. 排查路径与权限问题

  • 检查Constants类中的路径拼接逻辑:例如是否为Path.Combine(FileSystem.AppDataDirectory, "CalisthenicsTracker.db3"),避免文件名拼写错误(如遗漏.db3后缀)
  • 确认应用对AppDataDirectory的读写权限:虽然该目录为应用私有目录,权限通常默认开放,但仍需排除平台特殊权限限制(如Android 13+的存储权限配置)

内容的提问来源于stack exchange,提问作者Evan Montano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:53:10