Android应用更新仅在删除所有本地数据后才能生效

时间:2017-10-19 15:04:59

标签: android sqlite google-play okhttp google-play-developer-api

我遇到了在Play商店发布的应用程序的问题:

发布新更新后,某些用户无法正常使用该应用,直到他们删除该应用并从头开始重新安装。我无法重现此问题,并且我没有任何错误日志。

该应用程序具有内部SQLite数据库,每次发布新更新时都会擦除该数据库。它还通过okhttp库实现了一个REST客户端。

我觉得我在更新过程中遗漏了一些内容,但我不知道其他任何可能出错的内容。似乎数据库可能存在问题,但它将被完全擦除。 REST客户端也可能是一个问题,但我无法想象这实际上是一个问题。没有其他库似乎与此问题相关。

我期待任何建议,谢谢,

J.V。

编辑:用于SQLite处理的代码段

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执行相反的操作

2 个答案:

答案 0 :(得分:0)

您的onUpgrade()必须使数据库处于适合newVersion的状态。不要只是删除表,而是重新创建它。对于像您这样的破坏性升级过程,您可以通过调用onCreate()中的onUpgrade()来实现此目的:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL(SQL_DELETE_ENTRIES);
    onCreate(db);
}

答案 1 :(得分:0)

您应升级数据库的版本,请从12。在您的SQliteHelper类中。然后删除条目和创建条目,如:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
     db.execSQL(SQL_DELETE_ENTRIES);
     db.execSQL(SQL_CREATE_ENTRIES);
}