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

如何解决Xamarin Forms SQLite在Android 11上的运行错误?

问题根因
  • 路径参数错误:System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)在Android平台返回的是应用内部私有存储的files目录,属于文件夹路径,并非完整的数据库文件路径,你需要手动拼接数据库文件名到该路径末尾。
  • Android 11权限校验收紧:低版本Android系统对传入路径为目录的场景做了容错处理,会自动尝试适配错误生成临时文件,但Android 11及以上版本会直接抛出空引用异常,就是你遇到的对象引用错误。
  • 冗余权限不影响内部存储操作:你申请的外部存储相关权限和该问题无关,操作内部私有存储不需要任何外部存储权限,过度申请MANAGE_EXTERNAL_STORAGE反而可能触发应用审核风险。
修复步骤
  1. 修正数据库路径拼接逻辑
    替换你的路径获取代码为如下内容:
// 引用System.IO命名空间以使用Path.Combine方法
var rootDir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
// 拼接得到完整的数据库文件路径
var dbFullPath = Path.Combine(rootDir, "MyAppDB.sqlite");
var asyncConn = new SQLiteAsyncConnection(dbFullPath);
  1. 权限配置优化(可选)
    如果你的应用不需要访问外部存储公共目录,可修改AndroidManifest.xml中的权限配置,移除冗余权限:
<!-- 仅当应用确实需要访问外部存储时保留对应权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<!-- 非文件管理器类应用无需申请该权限 -->
<!-- <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> -->
  1. 依赖版本适配
    如果修正路径后问题仍存在,升级SQLite-net-pcl依赖包到最新稳定版,旧版本依赖对Android 11的API适配存在兼容问题,升级后即可解决。

内容的提问来源于stack exchange,提问作者Daniel Mamnev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:39:05