出于测试目的,我手动删除了我正在通过手机开发的应用程序。
使用Android Studio重新安装时,不会调用onCreate
中的SQLiteOpenHelper
方法。只有当我在系统的应用程序设置中明确清除应用程序的内存时,才会在下次启动时调用它。
发生了什么事?卸载期间应用程序是否未完全删除?
编辑1: 如果卸载了应用程序,该数据库文件如何保留?这会导致一些不必要的行为!什么是了解应用程序刚刚安装以及何时重置所有内容的最佳方式?
编辑2:
我目前的代码如下:
public class SQLiteDbHelper extends SQLiteOpenHelper {
// Yes, previous db versions would get upgraded, but this
// should not matter for the question, because I deinstall
// and reinstall.
private static final int DATABASE_VERSION = 2;
private static final String DATABASE_NAME = "AppDB";
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("info", "============================");
Log.i("info", "SQLiteDbHelper.onCreate(...)");
Log.i("info", "----------------------------");
// ...
Log.i("info", "============================");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("info", "============================");
Log.i("info", "SQLiteDbHelper.onUpgrade(...)");
Log.i("info", "oldVersion = " + oldVersion);
Log.i("info", "newVersion = " + newVersion);
Log.i("info", "============================");
// ...
}
// ...
}
答案 0 :(得分:1)
您可以查看This SO post
tl; dr,将数据库文件(.db)安装到SD卡或设备上的任何外部存储器将通过所有卸载保留该数据库文件。
检查是否要从应用程序将数据库文件安装到外部存储设备。
修改强> 在您的SQLiteOpenHelper类中,constrcutor的第二个参数定义文件的名称和位置,例如:
public class MyDBHelper extends SQLiteOpenHelper {
public static final int DB_VERSION = 1;
public static final String DB_NAME = "myDb.db";
public MyDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
...
}
将定义仅与您的应用数据相关联的数据库。如果您卸载了该应用程序,则会将其删除。
答案 1 :(得分:1)
问题出在我的 AndroidManifest.xml 文件中:
<application
android:allowBackup="true"
从未调用过{p> onCreate
,因为数据库文件仍然存在。我现在将allowBackup
设置为false
,卸载后删除所有内容。