2017-10-19 192 views
0

我遇到了正在Play商店发布的应用程序的问题后工作:Android应用程序更新只删除所有本地数据

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

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

我觉得我错过了更新过程中的某些东西,但我不知道其他任何可能出错的东西。似乎可能会有数据库问题,但它会完全消失。另外REST客户端可能是个问题,但我无法想象这实际上是一个问题。没有其他图书馆似乎与这个问题有关。

我期待着任何建议,谢谢你,

合资

编辑:一个用于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

您使用的是Java吗?有一个叫SQlite Helper的类。你可以使用它? – Xenolion

+0

是的,我正在使用Java和您提到的库。我认为这可能是更新我的应用程序时更常见的工作流程问题,但它也可能是软件问题,这就是为什么我提供了有关我使用的库的一些信息 – Jan

+0

编辑添加类的内容?我们可以看到它是如何工作的 – Xenolion

回答

0

您的onUpgrade()必须使数据库保持适合的状态newVersion。不要只是删除表格,而是重新创建它。对于一个破坏性的升级过程中,如您就可以通过调用onUpgrade()onCreate()实现它:

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

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

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