微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决重新启动设备后无法重新打开数据库

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

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

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。