我在 Android 上维护了一个长期存在的应用程序,我决定改变它背后的数据模型,将几个 SQLite 数据库合并到一个新的数据库中。
问题是,如果我只是创建新数据库并停止使用旧数据库,那么每个应用程序用户的本地存储中仍然会有旧的 SQLite 文件。
有没有办法在新版本的应用程序上强制“清除数据”?(我正在寻找“正确”的方法,我知道我可以检查新数据库是否存在并采取行动,但我认为可能有更好的方法)
谢谢
每当需要升级数据库时(例如,当用户下载新版本的应用程序时),数据库版本号的更改会调用 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);
}
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 文件中的版本代码)