我有一个使用数据库和SQLiteAssetHelper的工作应用程序.压缩数据库文件(sql.sqlite)(sql.sqlite.zip)并放入assets/databases文件夹.
该计划运作良好.当运行第二次/第三次/第四次......时,它会很快启动.但是,如果我执行"强制停止"后跟"清除数据"然后再次运行它,那么当我运行它(查看日志)时,我看到一个错误"未知错误(代码14):无法打开数据库"...但后来我等了几秒钟,这一切都加载完美.
日志如下:
W/SQLiteAssetHelper(18393): could not open database SQL.sqlite - unknown error (code 14): Could not open database
W/SQLiteAssetHelper(18393): copying database from assets...
W/SQLiteAssetHelper(18393): extracting file: 'sql.sqlite'...
W/SQLiteAssetHelper(18393): database copy complete
I/SQLiteAssetHelper(18393): successfully opened database SQL.sqlite
Run Code Online (Sandbox Code Playgroud)
所以看起来它似乎试图找到数据库,失败,崩溃,然后自己修复.所以我的问题是,我怎么能避免笨拙的开始和几秒钟的延迟?
编辑:我在代码中首次引用数据库是......
public class Globals extends Application
{
Custom_SQLiteAssetHelper db;
public void onCreate()
{
super.onCreate();
db = new Custom_SQLiteAssetHelper(this);
cursor = db.get_first_species_common_name();
Run Code Online (Sandbox Code Playgroud)
我有...
public class Custom_SQLiteAssetHelper extends SQLiteAssetHelper
{
public Custom_SQLiteAssetHelper(Context context)
{
super(context, "SQL.sqlite", null, 1);
}
public Cursor get_first_species_common_name()
{
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder querything = new SQLiteQueryBuilder();
// etc...
Run Code Online (Sandbox Code Playgroud)
小智 -1
public Custom_SQLiteAssetHelper(Context context)
{
super(context, "SQL.sqlite", null, 1);
}
Run Code Online (Sandbox Code Playgroud)
改成
public Custom_SQLiteAssetHelper(Context context)
{
super(context, "SQL.sqlite", null, 1);
close();
}
Run Code Online (Sandbox Code Playgroud)
@haike00 他正在使用 SQLiteAssetHelper 这是一个库,它支持您在首次运行应用程序时将预填充的 sqlite 数据库复制到内部/外部存储。使用此库时,您必须压缩 sqlite 文件,没有其他选项。
| 归档时间: |
|
| 查看次数: |
3993 次 |
| 最近记录: |