重新安装后没有SQLiteOpenHelper.onCreate调用

时间:2016-09-15 15:33:37

标签: android installation install

出于测试目的,我手动删除了我正在通过手机开发的应用程序。

使用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", "============================");

        // ...
    }

   // ...
}

2 个答案:

答案 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,卸载后删除所有内容。