首先,此行为仅从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();
}
}