我的应用程序更新有问题。
所有用户设置都保存在键值表内的SQLite DB中。在我将设置保留在共享首选项中之前,但在更新时它们已被删除。
由于数据库在更新时是安全的,我移动了数据库中的所有设置,一切正常。但不总是。大多数时候更新所有数据都会丢失。
如果先前删除了所有'data'文件夹,则现在只删除DB。虽然从未调用onUpgrade
方法。在Android Manifest android:allowBackup="true"
和android:fullBackupContent="@xml/backup_descriptor"
这是我的backup_descriptor文件:
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<include domain="database"
path="." />
<include domain="sharedpref"
path="." />
</full-backup-content>
这是我DBHelper
班的一部分:
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "create database");
db.execSQL("CREATE TABLE KV(name varchar(256) primary key, value varchar(256))");
fillSettings(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Обновление базы
Log.d(LOG_TAG, String.format("--- onUpgrade settings --- from %d to %d", oldVersion, newVersion));
if (newVersion > oldVersion) {
Log.d(LOG_TAG, "Обновление базы настроек!");
}
}
我尝试通过adb,文件管理器甚至是Play Market安装应用程序。在每种情况下都有以下情况: 例如,我安装app v8,进行一些更改并保存。然后我将我的应用更新到v9并且不打开它,我去检查文件(DB)是否存在,但它们不存在。
我真的不明白为什么会这样,我希望你能帮助我。 我试图在Stackoverflow上找到类似的东西,但常见的问题是如何在更新时删除数据,而我无法保存:(
UPD:我知道什么时候需要使用onUpgrage方法,我知道它是如何工作的。但我不明白为什么系统会清除我设备上的数据。我尝试使用相同的设备和操作系统版本(我的设备是Nexus 5x)在模拟器上进行测试,但问题没有出现。为什么? 我为语法道歉,我不太懂英语。
答案 0 :(得分:1)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL(DATABASE_ADD_COLUMN_!);
}
if (oldVersion < 3) {
db.execSQL(DATABASE_ADD_COLUMN_2);
}
}
我发现this教程对SQlite升级最有帮助。