重新启动设备后无法重新打开数据库

时间:2020-09-22 22:07:05

标签: android android-sqlite dagger-2 android-context ormlite

首先,此行为仅从Android 8.0开始发生

我在设备的根目录中有一个数据库(已加载信息),该数据库是在使用context.openOrCreateDatabase(String name, int mode, CursorFactory factory)启动应用程序时打开的,它运行良好,我什至可以关闭应用程序,而无需重新打开数据库任何问题。

问题是重新启动设备时,由于某种原因,无法再加载数据库,并且由于使用了上述方法,它尝试创建一个新数据库,因此覆盖了根目录中加载的数据库设备的...

编辑:我注意到重新启动设备后,我可以使用 设备文件资源管理器在打开数据库之前先打开数据库 应用程序,之后我可以从应用程序启动数据库 没有问题...

我正在使用Dagger进行注射:

    @Provides
    @Singleton
    DBHelper provideDatabaseHelper(Application context) {
        //[ Attemping to load database... 
        context.openOrCreateDatabase(Environment.getExternalStorageDirectory() + "/DB.db", Context.MODE_PRIVATE, null);

       //[ Create an instance of OrmLiteSqliteOpenHelper
        return DBHelper.getInstance(context);
    }

DBHelper.java

public class DBHelper extends OrmLiteSqliteOpenHelper {

    private static final String DATABASE_NAME = Environment.getExternalStorageDirectory() + "/DB.db";
    private static final int DATABASE_VERSION = 71;
    private static DBHelper mInstance = null;

    public static DBHelper getInstance(Context ctx) {
        if (mInstance == null) {
            mInstance = new DBHelper(ctx.getApplicationContext());
        }
        return mInstance;
    }

    private DBHelper(Context ctx) {
        super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { }

    @Override
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { }

    @Override
    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        this.close();
    }

}

0 个答案:

没有答案