Android 应用更新仅在删除所有本地数据后有效
Android App update only working after deleting all local data
我在 Play 商店发布的应用程序遇到问题:
在发布新的更新后,一些用户无法正常使用该应用程序,直到他们删除该应用程序并从头开始重新安装。我无法重现此问题,也没有任何错误日志。
该应用程序具有内部 SQLite 数据库,每次发布新更新时都会擦除该数据库。它还通过 okhttp 库实现了一个 REST 客户端。
我觉得我在更新过程中遗漏了一些东西,但我不知道还有什么可能出错的地方。看起来数据库可能有问题,但它会被完全擦除。 REST 客户端也可能是一个问题,但我无法想象这实际上是一个问题。没有其他库似乎与此问题相关。
我期待任何建议,谢谢,
J.V.
编辑:用于SQL站点处理
的代码段
public RfidTagDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
SQL_DELETE_ENTRIES 包含一段 SQL 代码,如果存在则删除所有表,CREATE_ENTRIES 则相反
您的 onUpgrade()
必须使数据库处于适合 newVersion
的状态。不要只是删除 table,还要重新创建它。对于像您这样的破坏性升级过程,您可以通过在 onUpgrade()
:
中调用 onCreate()
来实现
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
您应该将 class 的数据库版本从 1
升级到 2
。在您的 SQliteHelper Class 中。然后删除条目和创建条目,如:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
db.execSQL(SQL_CREATE_ENTRIES);
}
我在 Play 商店发布的应用程序遇到问题:
在发布新的更新后,一些用户无法正常使用该应用程序,直到他们删除该应用程序并从头开始重新安装。我无法重现此问题,也没有任何错误日志。
该应用程序具有内部 SQLite 数据库,每次发布新更新时都会擦除该数据库。它还通过 okhttp 库实现了一个 REST 客户端。
我觉得我在更新过程中遗漏了一些东西,但我不知道还有什么可能出错的地方。看起来数据库可能有问题,但它会被完全擦除。 REST 客户端也可能是一个问题,但我无法想象这实际上是一个问题。没有其他库似乎与此问题相关。
我期待任何建议,谢谢,
J.V.
编辑:用于SQL站点处理
的代码段public RfidTagDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
SQL_DELETE_ENTRIES 包含一段 SQL 代码,如果存在则删除所有表,CREATE_ENTRIES 则相反
您的 onUpgrade()
必须使数据库处于适合 newVersion
的状态。不要只是删除 table,还要重新创建它。对于像您这样的破坏性升级过程,您可以通过在 onUpgrade()
:
onCreate()
来实现
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
您应该将 class 的数据库版本从 1
升级到 2
。在您的 SQliteHelper Class 中。然后删除条目和创建条目,如:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
db.execSQL(SQL_CREATE_ENTRIES);
}