【发布时间】:2018-04-04 12:51:54
【问题描述】:
我正在尝试使用 SQLiteAssetHelper 将我预先填充的数据库复制到 Android 应用程序中。我的设备上有 Android-7(Nvidia Shield 和摩托罗拉手机)。从 Settings->App->MyApp 我启用了 Calender、Location 和 Storage 权限
我在 Manifest 文件中也有以下权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
当我将数据库保存在 assets/databases/databases 文件夹中时,我得到以下异常:
原因:com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException:无法将 /data/user/0/com.funcheap.funmapsf/databases/databases/MySFfuncheapDatabase.db 写入数据
当我将数据库保存在 assets/databases 文件夹中时,我得到以下异常:
原因:com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException:资产中缺少数据库/数据库/MySFfuncheapDatabase.db 文件(或 .zip、.gz 存档),或目标文件夹不可写
不幸的是,SO question 对我没有帮助
【问题讨论】:
-
您不需要该权限即可写入应用的内部存储区域 (
/data/.../<your app>/...)。这仅用于外部存储(通常是/storage/emulated/0/...) -
请提供minimal reproducible example,特别是显示您的
SQLiteAssetHelper子类。我认为您的问题出在您提供给SQLiteAssetHelper构造函数的数据库名称中。如何使用SQLiteAssetHelper,请参阅this sample app。 -
会不会是因为路径包含两次databases目录?即是否应该使用
/data/user/0/com.funcheap.funmapsf/databases/MySFfuncheapDatabase.db而不是/data/user/0/com.funcheap.funmapsf/databases/databases/MySFfuncheapDatabase.db?
标签: android android-sqlite android-7.0-nougat android-assets