我遇到了在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执行相反的操作
答案 0 :(得分:0)
您的onUpgrade()
必须使数据库处于适合newVersion
的状态。不要只是删除表,而是重新创建它。对于像您这样的破坏性升级过程,您可以通过调用onCreate()
中的onUpgrade()
来实现此目的:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
答案 1 :(得分:0)
您应升级数据库的版本,请从1
到2
。在您的SQliteHelper类中。然后删除条目和创建条目,如:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
db.execSQL(SQL_CREATE_ENTRIES);
}