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);
}