【问题标题】:show dialog when upgrading database升级数据库时显示对话框
【发布时间】:2015-08-11 10:27:46
【问题描述】:

首先,我很抱歉我的英语很幼稚。

我想在升级数据库时显示对话框。 现在我尝试创建 AsyncTask 并将升级逻辑放在“doInBackground”上。 并且,用于 'preExecute' 和 'postExecute' 来显示对话框。

这似乎是件好事。 但是,它有一个严重的问题。

当用户强制关闭应用程序(使用任务杀手或任务管理器)时,android系统会误解每项工作都做得很好。

看看这个流程

[干得好]

数据库版本 = 1;

  1. 执行 onUpgrade()

  2. 执行 AsyncTask。

  3. onPreExecute(), showProgressDialog.

  4. doInBackground(),正在迁移数据库。

  5. onPostExecute(),dismissProgressDialog。

数据库版本 = 2;


[糟糕的工作]

数据库版本 = 1;

  1. 执行 onUpgrade()

  2. 执行 AsyncTask。

  3. onPreExecute(), showProgressDialog.

  4. doInBackground(),正在迁移数据库。

  5. 强制停止应用程序(使用任务杀手或任务管理器)

数据库版本 = 2;

数据库迁移没有完全执行,但是databaseVersion是2!!

我该如何解决这个问题?

【问题讨论】:

  • 如何设置新的数据库版本?
  • 只使用 SQLiteOpenHelper。
  • new SQLiteOpenHelper(context, name, factory, version).getWritableDatabase();
  • 如何确认数据库迁移没有正确执行?
  • 我很高兴你这样做了☺。

标签: android sqlite


【解决方案1】:

当数据库升级时,'onUpgrade()' 被调用。 一切都做得很好,'db.setVersion(newVersion);'被调用。

下面的代码在'SQLiteOpenHelper.getDatabaseLocked(boolean writable)'中

db.beginTransaction();
try {
    if (version == 0) {
        onCreate(db);
    } else {
        if (version > mNewVersion) {
            onDowngrade(db, version, mNewVersion);
        } else {
            onUpgrade(db, version, mNewVersion);
        }
    }
    db.setVersion(mNewVersion);
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

所以,当升级中断时,数据库版本没有设置为新版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多