3

我在 Android 上维护了一个长期存在的应用程序,我决定改变它背后的数据模型,将几个 SQLite 数据库合并到一个新的数据库中。

问题是,如果我只是创建新数据库并停止使用旧数据库,那么每个应用程序用户的本地存储中仍然会有旧的 SQLite 文件。

有没有办法在新版本的应用程序上强制“清除数据”?(我正在寻找“正确”的方法,我知道我可以检查新数据库是否存在并采取行动,但我认为可能有更好的方法)

谢谢

4

2 回答 2

2

每当需要升级数据库时(例如,当用户下载新版本的应用程序时),数据库版本号的更改会调用 onUpgrade() 方法,您可以覆盖 SQLiteOpenHelper 类提供的该方法:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w("TaskDBAdapter", "Upgrading from version "+oldVersion
            +" to "+newVersion
            +", which will destroy all old data");
    for (String string : table_names)
            db.execSQL("drop table if exists "+ string);
    onCreate(db);
}
于 2013-04-19T21:19:25.347 回答
1

BroadcastReceiver是的,您可以为操作定义一个MY_PACKAGE_REPLACED。在此接收方的onReceive方法中,您可以删除数据库。(API12+)

<receiver
    android:name=".OnUpgradeReceiver"
    android:enabled="true" >
    <intent-filter>
        <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
    </intent-filter>
</receiver>

和广播接收器

public class OnUpgradeReceiver extends BroadcastReceiver {
    public OnUpgradeReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        context.deleteDatabase("YOUR_DATABASE_NAME");
    }
}

注意这只会在更新的情况下触发(增加 Gradle 文件中的版本代码)

于 2016-12-05T09:49:13.793 回答